首页 / 知识
属性
2023-04-16 20:54:00
Attribute & Reflection libraries for C++?大多数成熟的C项目似乎都有自己的反射和属性系统,即用于定义可以通过字符串访问并可以自动序列化的属性。至少我参与的许多C项目似乎都是在重新发明轮子。 您是否知道C的任何良好的开源库,都支持反射和属性容器,特别是:
有一个新项目使用完全不同的方法在C中提供反射:CAMP。 CAMP不使用预编译器,使用类似于boost.python或luabind的语法手动声明类/属性/函数/...。当然,如果愿意,人们可以使用gccxml或open-c之类的预编译器来生成此声明。 它仅基于纯C和boost头,并且由于模板元编程的强大功能,它支持任何类型的可绑定实体(例如,继承和奇怪的构造函数都不是问题)。 它是根据MIT许可(以前是LGPL)分发的。 这是C遇到反射时得到的结果: 无论您选择什么,它都可能具有可怕的宏,难以调试的代码或怪异的构建步骤。我已经看到一个系统从DevStudio的PDB文件自动生成序列化代码。 尽管如此,严重的是,对于小型项目,编写保存/加载函数(或使用流运算符)会更容易。实际上,这也可能适用于大型项目-很明显,这是怎么回事,而且如果结构发生更改,通常通常仍然需要更改代码。 您可以看看下面的两个工具。我从未使用过它们中的任何一个,所以我无法告诉您它们的实用性。 XRTTI:
OpenC:
我看了很长时间这些东西,但它们往往很笨拙。它们可能会阻止您使用继承或使用奇怪的构造函数等。最后,它们最终负担过多,而不是带来麻烦。 这种公开我现在使用的成员的方法非常轻巧,例如,您可以浏览一个用于序列化的类或将所有名为" x"的字段设置为0。它也是静态确定的,因此非常快。无需担心库代码或代码源的任何层会干扰构建过程。它概括为嵌套类型的层次结构。 使用一些宏来设置编辑器,以自动编写其中的一些内容。
也看了一会儿。当前最简单的解决方案似乎是BOOST_FUSION_ADAPT_STRUCT。实际上,一旦有了库/标题,您只需要将结构字段添加到BOOST_FUSION_ADAPT_STRUCT()宏中,如代码的最后一部分所示。是的,它有许多其他人提到的限制。而且它不直接支持侦听器。 我研究过的其他有希望的解决方案是
关于boost / __ cxa方法,一旦找出所有小细节,添加/更改结构或字段就很容易维护。我们目前使用它在dbus之上构建自定义类型绑定层,以序列化API并隐藏托管对象服务子系统的传输/ RPC详细信息。 这通常是C语言一个臭名昭著的弱点,因为使反射实现可移植且值得进行的操作需要标准化的东西不是标准的。想到了调用约定,对象布局和符号修饰,但是还有其他一些。 标准缺乏指导,意味着编译器实现者将做一些不同的事情,这意味着很少有人有动力编写一个可移植的反射库,这意味着需要反射的人会重新发明轮子,但是仅够满足他们的需求。这是无限期发生的,到此为止。 不是一般的,但是QT通过元编译器支持此功能,并且是GPL。 自动内省/反射工具包。使用Qt之类的元编译器,并将元信息直接添加到目标文件中。直观易用。没有外部依赖性。甚至允许自动反映std :: string,然后在脚本中使用它。请访问IDK |
最新内容
相关内容
linux关闭系统的命令?
linux关闭系统的命令?,系统,工作,命令,时间,用户,指令,通知,目的,终端,表示,详解Linux系统中关机与重启相关命令的用法打开这里的LINUX,UBUNTUlinux系统nl命令?
linux系统nl命令?,系统,工作,命令,信息,文件,标准,工具,单位,公式,内容,nl是什么意思?女生说nl的意思是:常规的恋爱。“nl”是“NormalLove”的linux命令修复系统?
linux命令修复系统?,系统,地址,时间,工作,数据,一致,第一,工具,流程,命令,当LINUX文件系统受到破坏时,如何检查和修复系统?chkdsk。chkdsk的全linux系统开发命令?
linux系统开发命令?,工作,系统,地址,信息,命令,目录,数据,管理,单位,功能,Windows10系统下使用Linux命令的详细方法在 Windows 10 中使用 Linulinux系统命令awk?
linux系统命令awk?,数据,系统,工具,基础,标准,名称,单位,命令,文本,语法,Linux三剑客awk命令篇二:命令操作符1、语法格式:(1) Awk完整语法 awklinux系统命令vim?
linux系统命令vim?,系统,工作,发行,模式,连续,工具,官方网站,状态,环境,时间,linux中在vim编辑器中使用date命令1、vim显示历史命令,先按q,再按:qlinux系统常用命令表?
linux系统常用命令表?,系统,基础,工作,工具,管理,网络,命令,数据,标准,地址,linux常用的20个命令?1、系统管理相关命令:df、top、free、quota、linux系统命令无效?
linux系统命令无效?,系统,密码,数据,工具,网络,信息,软件,情况,在线,时报,linux下安装了mysql,输入mysql命令无效是怎么回事?linux下已经装了mlinux系统解压缩命令?
linux系统解压缩命令?,系统,工具,管理,文件,命令,名称,电脑,格式,文件名,目录,linux解压zip命令首先在电脑中,连接到linux远程主机,并进入zip文linux系统用户命令?
linux系统用户命令?,系统,工作,地址,信息,管理,命令,目录,时间,电脑,名称,请问linux操作系统的命令是什么linux命令是对Linux系统进行管理的命linux系统清缓存命令?
linux系统清缓存命令?,数据,系统,地址,服务,网络,电脑,缓存,工具,环境,设备,linux下如何清理redis缓存既可以在 redis.conf 文件中设置, 也可以linux系统中vi命令?
linux系统中vi命令?,位置,状态,档案,系统,首开,工作,数据,环境,数字,正规,linux用VI编辑后保存退出命令是什么啊?1、linux退出vi编辑命令有四