物体反射 有没有人在C++中建立一个完整的对象/类反射系统?p>

物体反射 有没有人在C++中建立一个完整的对象/类反射系统?p>,c++,reflection,introspection,C++,Reflection,Introspection,我见过一些疯狂的宏/模板解决方案,但是我从来没有找到一个能将所有问题都解决到我满意的程度的系统 谢谢 我不完全确定我是否理解您的意图,但是Qt框架包含一个强大的功能,可以让您执行系统反射所期望的大多数操作:将类名作为字符串获取,检查对象是否是给定类型的实例,列出并调用方法,等等。使用模板和宏自动,或者半自动地,定义一切是C++中唯一的选择。C++具有很强的反思能力和反思能力。但是,如果您想做的主要是序列化和存储,那么这已经在中实现了。您可以通过在类上实现,或者如果不想修改该类,则可以这样做 但这

我见过一些疯狂的宏/模板解决方案,但是我从来没有找到一个能将所有问题都解决到我满意的程度的系统


谢谢

我不完全确定我是否理解您的意图,但是Qt框架包含一个强大的功能,可以让您执行系统反射所期望的大多数操作:将类名作为字符串获取,检查对象是否是给定类型的实例,列出并调用方法,等等。

使用模板和宏自动,或者半自动地,定义一切是C++中唯一的选择。C++具有很强的反思能力和反思能力。但是,如果您想做的主要是序列化和存储,那么这已经在中实现了。您可以通过在类上实现,或者如果不想修改该类,则可以这样做

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

如果您想这样做,我建议您看看JavaScript是如何实现对象的。JavaScript使用了一个简单但功能相当强大的。我建议这样做,因为在我看来,如果你必须自己做的话,它会更容易实现。如果你想读一篇关于原型的好处和优雅的长篇大论,你可以在SteveYegge的博客上找到一篇文章。他是一位经验丰富的程序员,所以我相信他的观点,但我自己从来没有这样做过,所以我只能指出别人所说的

如果你想继续使用C++类和类的实例,而不是不太熟悉的原型,那么看看Python和Work。Python也使用“属性”方法来实现它的对象,但是属性用于实现类和继承,而不是基于原型的系统,因此它可能更熟悉一些


很抱歉,对于你的问题,我没有更简单的答案!但希望这会有所帮助。

我使用了这个库并取得了很好的效果。与其使用像你所描述的疯狂宏/模板解决方案,它在构建时处理你的C++头文件来创建反射字典,然后操作这些字典。

你需要什么样的能力来为你的反射系统?你是在谈论C++中实现的一个OO类系统,它独立于内置C++类系统,或者改写C++进行反射/内省?复古C++,有自省/反射,这样我就可以离线存储/创建对象,这样Seaki就想存储类/对象实例。通常这是在XML/Json/ini中完成的。解决方案通常要么存储带有类描述的元文件,要么使用模板/宏来自动定义所有内容……我尝试了这种方法,增加了劫持默认赋值运算符生成机制的扭曲,并将其用于对数据成员和基类的一般迭代:。