我需要一个好的C++反射API (如Microsoft API),它使我能够确定在运行时标识的类型(类、结构、枚举、整型、浮点型、双精度型等),声明它们,并在运行时调用这些类型上的方法。
致以敬意,
Usman
发布于 2012-01-24 07:04:02
C++是一种极其复杂的语言。“反射”API不是语言设计的一部分,所以基本上不存在。
如果你想要通用的“反射”和“元编程”,你可以通过跳出语言并使用program transformation system (PTS)来实现。为了你的目的,这样的工具必须解析C++ (一次在多个编译单元中),为你提供对所有语言结构的访问,让你思考,也就是确定任何结构(例如,变量,表达式或其他语法结构)的类型(或其他属性),并使你能够应用任意的代码修改。显然,这不会在“运行时”发生(尽管我认为如果你坚持,你可以购买这样的机器)。
我们的DMS Software Reengineering Toolkit及其C++ Front End在分析和转换非常大的C++代码集方面有着良好的跟踪记录。有关一些详细的用例,请参阅technical papers。我认为维基百科网站上的其他工具不能处理C++,尽管它们有正确的思维方式。
虽然它不是真正的PTS (无源到源转换),但Clang也可以工作。我不确定(因为我没有全部使用),它如何收集类型信息并使用它来驱动对源代码的转换。它显然非常擅长使用这些信息来生成LLVM代码。
发布于 2012-01-24 07:21:42
如果你正在尝试一个插件类型的架构,http://pocoproject.org上的POCO库中的一些部分可能会让你有所收获。它将允许您在运行时加载.dll或.so并创建其中包含的类。但是调用代码仍然需要一个描述接口(或抽象基类)的头文件,以便能够获得方法的签名。
https://stackoverflow.com/questions/2915458
复制相似问题