有没有人引用任何用C++构建完整的对象/类反射系统的信息?

香港专业教育学院见过一些疯狂的宏/模板解决方案,但香港专业教育学院从未找到一个可以解决所有问题的系统。

谢谢!

最佳答案

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

这似乎并不是您要问的。我猜想您想要像自动序列化之类的东西,它不需要类实现者的额外努力。他们在PythonJava和许多其他语言中都有此语言,但C++没有。为了获得所需的内容,您需要实现自己的对象系统,例如IgKh在his answer中提到的元对象系统。

如果您想这样做,建议您查看JavaScript如何实现对象。 JavaScript使用prototype based object system,它相当简单,但功能相当强大。我建议这样做,因为在我看来,如果您必须自己执行,它将更容易实现。如果您想阅读有关原型(prototype)的好处和优雅的长篇大论,可以在Steve Yegge的博客中找到essay on the subject。他是一位非常有经验的程序员,所以我给他的意见有一些保证,但是我自己从来没有做过,所以我只能指出别人说的话。

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

抱歉,我对您的问题没有一个简单的答案!但是希望这会有所帮助。

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

10-11 15:57