首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >对象反射

对象反射
EN

Stack Overflow用户
提问于 2009-10-08 20:08:05
回答 3查看 2.1K关注 0票数 2

有谁有在C++中构建一个完整的对象/类反射系统的参考资料吗?

我见过一些疯狂的宏/模板解决方案,然而,我从来没有找到一个系统,可以将所有问题都解决到我所熟悉的程度。

谢谢!

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2009-10-08 22:03:20

在C++中,使用模板和宏来自动或半自动地定义一切几乎是唯一的选择。C++的反射/内省能力非常弱。但是,如果您想要做的主要是序列化和存储,这已经在Boost Serialization libraries中实现了。这可以通过在类上实现serializer method来实现,或者在不想修改类的情况下实现have an external function

不过,这似乎不是你想要的。我猜您想要自动序列化之类的东西,它不需要类实现者的额外工作。他们在PythonJava和许多其他语言中都有这个功能,但C++没有。为了得到你想要的东西,你需要实现你自己的对象系统,比如IgKh在his answer中提到的元对象系统。

如果你想这样做,我建议你看看JavaScript是如何实现对象的。JavaScript使用prototype based object system,它相当简单,但功能相当强大。我推荐这样做,因为在我看来,如果你必须自己去做,它会更容易实现。如果你有兴趣阅读关于原型的好处和优雅的长篇大论的解释,你可以在Steve Yegge的博客上找到一个essay on the subject。他是一个非常有经验的程序员,所以我相信他的观点,但我自己从来没有这样做过,所以我只能指出别人说过的话。

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

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

票数 2
EN

Stack Overflow用户

发布于 2009-10-08 20:29:39

我不能完全确定我是否理解了你的意图,但是Qt框架包含了一个强大的meta object system,它可以让你完成系统反射的大部分操作:获取字符串形式的类名,检查对象是否是给定类型的实例,列出和调用方法,等等。

票数 2
EN

Stack Overflow用户

发布于 2009-11-06 23:25:15

我已经使用了ROOT's Reflex库,效果很好。它不是像你描述的那样使用疯狂的宏/模板解决方案,而是在构建时处理你的C++头文件来创建反射字典,然后在这些字典上运行。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1540114

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档