我需要一个好的 C++ 反射 API(如 Microsoft API),它使我能够确定在运行时识别的类型(类、结构、枚举、int、float、double 等),声明它们,并在运行时调用这些类型的方法.
问候,
乌斯曼
我需要一个好的 C++ 反射 API(如 Microsoft API),它使我能够确定在运行时识别的类型(类、结构、枚举、int、float、double 等),声明它们,并在运行时调用这些类型的方法.
问候,
乌斯曼
If you are trying to get to a plugin-type architecture, the POCO Library at http://pocoproject.org has some pieces that might get you part of the way. It will allow you to load a .dll or .so at runtime and create the classes contained in it. But the calling code will still need a header file which describes an interface (or abstract base class) to be able to get the signatures of the methods.
C++ 是一种非常复杂的语言。“反射性”API 不是语言设计的一部分,因此基本上不存在。
如果您想要通用的“反射”和“元编程”,您可以通过跳出语言并使用程序转换系统 (PTS)来实现。这样的工具为您的目的必须解析 C++(一次在多个编译单元中),为您提供对所有语言结构的访问,让您反映,即确定任何构造的类型(或其他属性) (例如,变量、表达式或其他语法结构)并使您能够应用任意代码修改。显然,这不会在“运行时”发生(尽管我想如果你坚持的话,你可以花钱买这样的机器)。
我们的DMS 软件再造工具包及其C++ 前端在分析和转换非常大的 C++ 代码集方面有着良好的记录。有关一些详细的用例,请参阅技术论文。我不认为 Wikipedia 站点上的其他工具可以处理 C++,尽管它们有正确的心态。
虽然它不是真正的 PTS(没有源到源的转换),但Clang也可以工作。我不确定(因为我没有全部使用它),它如何收集类型信息并使用它来驱动对源代码的转换。它显然非常擅长使用这些信息进行 LLVM 代码生成。