1

可能重复:
如何向 C++ 应用程序添加反射?

有没有办法在 C++ 中获取对象或类的类名、类成员和类方法?

在 Java 中,我可以使用:

Object.getClass().getMethods()
Object.getClass().getName()
Object.getClass().getDeclaredMethods();
Object.getClass().getDeclaredFields();
Object.getClass().getMembers();

我知道 QT 中有 metaObject-Class。但我不想使用这个框架。boost-libary 或 STL 中还有其他内容吗?

http://doc.qt.digia.com/qt/metaobjects.html#meta-object-system

谢谢。

4

2 回答 2

3

没有办法在 C++11 中获得一般反射。您可以做的最接近的事情是通过运算符获取对象的类型作为std::type_info使用运行时类型信息typeid

这个 type_info 可以继承自,使您能够手动将一些额外的类型信息烘焙到您的类型中,并且您可以根据需要对其进行自定义。这在 Bjarne Stroustrup 的书籍“C++ 编程语言”“C++ 的设计与演变”中有更详尽的解释,但我无法快速找到它的网络参考。

如您的问题所述,为了全面反思,您将不得不等待并希望这将在标准的未来版本中可用。C++ 标准委员会第 7 分组 (SG7) 目前正在处理这个问题:

http://isocpp.org/std/the-committee

于 2012-12-10T11:23:14.307 回答
0

现在 C++(甚至 C++11)没有这样的特性(反射),但是这个特性将在 C++14 中讨论:参见这里这里(SG7 组)

于 2012-12-10T11:17:21.683 回答