c++ - 对象反射

标签 c++ reflection introspection

有人有关于用 C++ 构建完整的对象/类反射系统的引用吗?

我见过一些疯狂的宏/模板解决方案,但是我从未找到一个系统可以将所有问题解决到我满意的水平。

谢谢!

最佳答案

使用模板和宏自动或半自动定义所有内容几乎是 C++ 中唯一的选择。 C++ 的反射/内省(introspection)能力非常弱。然而,如果你想做的主要是序列化和存储,这已经在Boost Serialization libraries中实现了。 。您可以通过实现 serializer method 来做到这一点在类里面,或 have an external function如果您不想修改该类。

但这似乎不是您要问的。我猜您想要类似自动序列化的东西,这不需要类实现者付出额外的努力。他们在Python中有这个,和Java以及许多其他语言,但不包括 C++。为了得到你想要的,你需要实现你自己的对象系统,就像 IgKh 在 his answer 中提到的元对象系统一样。 .

如果你想这样做,我建议你看看 JavaScript 如何实现对象。 JavaScript 使用 prototype based object system ,这相当简单,但相当强大。我推荐这样做是因为在我看来,如果您必须自己做的话,实现起来会更容易。如果您有心情阅读有关原型(prototype)优点和优雅的冗长解释,您可以找到 essay on the subject在史蒂夫·叶格的博客上。他是一个非常有经验的程序员,所以我相信他的意见,但我自己从来没有这样做过,所以我只能指出别人说的。

如果您想继续使用更 C++ 风格的类和实例,而不是不太熟悉的原型(prototype),请查看 Python objects 如何使用和 serialization工作。 Python 也使用“属性”方法来实现其对象,但属性用于实现类和继承,而不是基于原型(prototype)的系统,因此可能更熟悉一些。

抱歉,我无法更简单地回答您的问题!但希望这会有所帮助。

关于c++ - 对象反射,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1540114/

相关文章:

python - 在更新期间像演示文稿一样显示图像而不显示桌面

c# - 使用反射获取静态属性值,派生类和基类的串联

python - QtScript 内省(introspection)/反射(reflection)?

python - 如何测试一个对象是一个函数还是一个未绑定(bind)的方法?

c++ - 使用 SFML 和 Qt

c++ - 为什么人们在 openmp 循环之前声明迭代值?

C++:初始化列表/命名约定

c# - 通过反射创建 Expression<Func<T, object>> 变量

c# - 无法在 .NET Core 中创建动态类型

objective-c - respondsToSelector:相当于 CoreFoundation?