|
|
1
5
|
|
|
2
11
这就是C++遇到反射时所得到的结果:
无论您选择什么,它都可能有可怕的宏、难以调试的代码或奇怪的构建步骤。我见过一个系统从devstudio的pdb文件自动生成序列化代码。 不过,说真的,对于小项目来说,编写保存/加载函数(或者使用流式操作符)会更容易。事实上,这对大型项目也适用——很明显,如果结构发生变化,通常需要更改代码。 |
|
3
11
有一个新的项目在C++中用一种完全不同的方法提供了反映: 营地 . https://github.com/tegesoft/camp camp不使用预编译器,类/属性/函数。使用类似于boost.python或luabind的语法手动声明。当然,如果愿意的话,人们可以使用像gcXML或open-c++这样的预编译程序来生成这个声明。 它只基于纯C++和Boost标头,并且得益于模板元编程的能力,它支持任何类型的可绑定实体(例如,继承和奇怪的构造函数不是问题)。 它是根据麻省理工学院的许可证(以前是LGPL)分发的。 |
|
|
4
4
我看这些东西看了很长一段时间,但它们往往很重。它们可能会阻止您使用继承,或者使用奇怪的构造函数等,最终它们会成为太多的负担而不是方便。 这种公开我现在使用的成员的方法非常轻量级,可以让您探索一个用于序列化的类,或者将所有名为“x”的字段设置为0。它也是静态确定的,所以非常快。无需担心库代码或代码生成层会干扰构建过程。它一般化为嵌套类型的层次结构。 使用一些宏设置编辑器,以自动编写其中的一些内容。
|
|
|
5
3
也看了一会儿。目前最简单的解决方案似乎是 BOOST_FUSION_ADAPT_STRUCT . 实际上,一旦您有了库/头,您只需要将结构字段添加到boost-fusion-adapt-struct()宏中,就像 the last segment of the code shows .是的,它有许多其他人提到的限制。它不直接支持听众。 我研究的其他有希望的解决方案是
关于boost/uuucxa方法,一旦您了解了所有的小细节,添加/更改结构或字段就很容易维护了。我们目前使用它在dbus上构建一个自定义类型绑定层,序列化API并隐藏托管对象服务子系统的传输/rpc详细信息。 |
|
6
2
不是一般的,但qt通过一个元编译器支持这一点,并且是gpl。 我与QT人的理解是,这是不可能的纯C++,因此需要的MOC。 |
|
|
7
2
这是C++语言的一个臭名昭著的弱点,因为需要进行标准化以使反射实现轻便和有价值的东西不是标准的。人们会想到调用约定、对象布局和符号管理,但也有其他一些。 缺乏标准的指导意味着编译器的实现者会做一些不同的事情,这意味着很少有人有动机编写一个可移植的反射库,这意味着需要反射的人会重新发明轮子,但只会满足他们的需要。这种情况发生了 无穷大 我们到了。 |
|
|
JBryanB · 如何从基本抽象类访问类属性 3 年前 |
|
|
Gabe Tucker · 无法在golang中分配接口对象指针 4 年前 |
|
|
jkone27 · F#-在编译时从字符串生成简单的空类型 8 年前 |
|
|
John Bustos · C#通用工厂模式,不说明通用工厂模式的类型 8 年前 |
|
|
Randall Flagg · 访问propertyinfo中的属性 8 年前 |
|
|
Kacper · 在反映的全名和成员c后的“*”中,“+”是什么意思# 8 年前 |
|
|
tobeypeters · 反射铸造 8 年前 |
|
|
myst02 · 如何在另一个方法之后调用该方法? 8 年前 |