17

假设我们在 C++ 中有一个结构:

struct foobar
{
      int age; 
      bool hot;
      String name
};

有没有办法以编程方式查询上述结构以提取其实例成员?例如:

String[] members = magicClass.getInstanceMembers(foobar);

成员将拥有["age", "hot", "name"]它的价值观。

可能的?我问的原因是因为我有随时间变化的结构(添加/删除的变量)。我希望能够使用这些保存的数据创建自动生成的 Lua 文件。

谢谢

4

3 回答 3

14

不,标准 C++ 不支持这种类型的反射。有一些“hacky”方法使用宏来创建类型特征类模板,该模板将使用SFINAE静态确定特定类是否具有某个数据成员或成员函数,但实际上并没有枚举一个班级。

事实上,C++ 在设计时考虑了某种哲学,即使不是适得其反,也很难支持我们在 C#/Java 等高级语言中看到的运行时反射类型。请参阅为什么 C++ 没有反射?对这个问题进行彻底的讨论。

于 2010-11-05T21:04:10.473 回答
1

我认为你正在寻找的是所谓的反射。这在 C/C++ 中不容易做到: http : //www.garret.ru/cppreflection/docs/reflect.html http://en.wikipedia.org/wiki/Reflection_(computer_science)

于 2010-11-05T21:06:41.193 回答
1

如果你真的,真的想用反射编写“c++”代码,你可以看看代码生成器是ROOT做什么cintmakecint。但这可能不是你真正想要做的......

于 2010-11-07T18:05:29.230 回答