当前位置:  开发笔记 > 编程语言 > 正文

C++的属性和反射库?

如何解决《C++的属性和反射库?》经验,为你挑选了3个好方法。

大多数成熟的C++项目似乎都有自己的反射和属性系统,即用于定义可以通过字符串访问的属性并且可以自动序列化.我参与的至少很多C++项目似乎重新发明了轮子.

你知道任何支持反射和属性容器的C++ 开源库,特别是:

通过宏定义RTTI和属性

通过代码访问RTTI和属性

自动序列化属性

听取属性修改(例如OnValueChanged)

小智.. 12

有一个新项目使用完全不同的方法在C++中提供反射:CAMP. https://github.com/tegesoft/camp

CAMP不使用预编译器,类/ properties/functions/...是使用类似于boost.python或luabind的语法手动声明的.当然,人们可以使用像gccxml或open-c ++这样的预编译器来生成这个声明,如果他们愿意的话.

它仅基于纯C++和boost头,并且由于模板元编程的强大功能,它支持任何类型的可绑定实体(例如,继承和奇怪的构造函数不是问题).

它是在MIT许可证(以前的LGPL)下分发的.



1> 小智..:

有一个新项目使用完全不同的方法在C++中提供反射:CAMP. https://github.com/tegesoft/camp

CAMP不使用预编译器,类/ properties/functions/...是使用类似于boost.python或luabind的语法手动声明的.当然,人们可以使用像gccxml或open-c ++这样的预编译器来生成这个声明,如果他们愿意的话.

它仅基于纯C++和boost头,并且由于模板元编程的强大功能,它支持任何类型的可绑定实体(例如,继承和奇怪的构造函数不是问题).

它是在MIT许可证(以前的LGPL)下分发的.


这已经分叉了[继续作为思考](http://billyquith.github.io/ponder/)

2> Skizz..:

这是C++遇到Reflection时得到的:

C++符合Reflection

无论你选择什么,它都可能有可怕的宏,难以调试代码或奇怪的构建步骤.我见过一个系统从DevStudio的PDB文件中自动生成序列化代码.

但严重的是,对于小型项目,编写保存/加载功能(或使用流式运算符)会更容易.实际上,这也可能适用于大型项目 - 显而易见的是,如果结构发生变化,您通常需要更改代码.


马车刻字有一个错字,应该是l337!

3> Carl Selebor..:

你可以看看下面的两个工具.我从来没有使用过它们中的任何一个,所以我不能告诉你它们是如何实用的.

XRTTI:

Xrtti是一个工具和附带的C++库,它扩展了C++的标准运行时类型系统,以提供更丰富的关于类和方法的反射信息集来操作这些类及其成员.

OpenC++:

OpenC++是C++前端库(词法分析器+解析器+ DOM/MOP)和源到源转换器.OpenC++支持开发C++语言工具,扩展,特定于域的编译器优化和运行时元对象协议.

推荐阅读
无名有名我无名_593
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有