需要了解好的C ++ Reflection API(用于RuntimeType标识-RTTI和运行时调用)

时间:2010-05-26 17:54:12

标签: c++ reflection visual-c++ rtti

我需要一个好的C ++ Reflection API(比如Microsoft API),这使我能够确定在运行时识别的类型(类,结构,枚举,int,float,double等),声明它们,并调用那些方法运行时的类型。

此致

乌斯曼

2 个答案:

答案 0 :(得分:0)

C ++是一种非常复杂的语言。 “反射”API不是语言设计的一部分,因此基本上不存在。

如果你想要通用的“反思”和“元编程”,你可以通过踩在外面语言并使用program transformation system (PTS)来实现。这样一个工具用于您的目的必须解析C ++(一次在多个编译单元中),让您访问所有语言结构,让您反映,即确定类型(或任何构造的其他属性(例如,变量,表达式或其他语法构造),并使您能够应用任意代码修改。显然,这不会发生在“运行时”(虽然我认为如果你坚持的话,你可以向这样的机器掏空)。

我们的DMS Software Reengineering Toolkit及其C++ Front End在分析和转换非常大的C ++代码集方面有着良好的记录。有关详细用例,请参阅technical papers。我不认为维基百科网站上的其他工具可以处理C ++,尽管他们有正确的心态。

虽然它不是真正的PTS(没有源到源的转换),但Clang也可能有用。我不确定(因为我不全部使用它),它如何收集类型信息并使用它来驱动转换为源代码。它显然非常擅长使用这些信息来生成LLVM代码。

答案 1 :(得分:0)

如果您正在尝试使用插件类型的体系结构,http://pocoproject.org处的POCO库可能会有一些部分可能让您获得部分内容。它允许您在运行时加载.dll或.so并创建其中包含的类。但是调用代码仍然需要一个头文件来描述一个接口(或抽象基类),以便能够获得方法的签名。