C/C++可以通过查询类来获取实例成员的"列表"吗?

Car*_*ndo 15 c c++ instance-variables

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

struct foobar
{
      int age; 
      bool hot;
      String name
};
Run Code Online (Sandbox Code Playgroud)

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

String[] members = magicClass.getInstanceMembers(foobar);
Run Code Online (Sandbox Code Playgroud)

成员会有["age", "hot", "name"]它的价值观.

可能?我问的原因是因为我的结构随着时间的推移发生了变化(添加/删除了变量).我希望能够使用此保存的数据创建自动生成Lua文件.

谢谢

Cha*_*via 14

不,标准C++不支持这种类型的反射.有一些"hacky"方法使用宏来创建一个type-traits-esque模板,该模板将使用SFINAE静态地确定某个特定类是否具有某个数据成员或成员函数,但实际上并不会枚举每个成员类.

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

  • @Carlo del Mundo:实际上大多数人认为这是一个加分.虽然反射对于构建开发人员工具非常有用.在实际代码中,它并没有那么有用,并且经常导致维护代码的可怕性(当然总有例外). (10认同)
  • @Martin,是的,但我希望看到对*编译时*反射的更好支持,这可以帮助增强模板库设计。无论如何,我认为反射的最佳用例是实现通用序列化函数。 (2认同)
  • 例如,假设一个元函数使用递归模板实例化来迭代类中的所有数据成员.这将允许编译器为任何类一般生成序列化函数,而不需要Java样式反射所需的任何运行时开销. (2认同)