1
5
你也许可以用boost来解决这个问题 tuples .它将导致一个与您现在所想的不同的设计,但它应该允许您以通用的方式解决问题。 下面的示例定义了“std::string,bool”形式的记录,然后从流中读取该数据。
函数用于从IStream读取数据。第一个重载在到达最后一个记录类型后停止通过元组的迭代:
下面的类实现了记录的getter成员。使用recordkind作为我们的密钥,我们得到了我们感兴趣的特定成员。
下一个类型是记录的元描述。枚举给了我们一个可以用来访问成员的符号名,即字段名。然后,元组定义这些字段的类型:
最后,我们构造一个记录并从流中读取一些数据:
因为这都是模板代码,所以您应该能够将记录嵌套在记录中。 |
2
8
如果您正在寻找一种用C++代码生成来串行化/反序列化数据的方法,那么我将查看谷歌原型(FixBuffs)。 http://code.google.com/p/protobuf/ )或者Facebook的节俭( http://incubator.apache.org/thrift/ ) 对于Protobufs,可以编写这样的数据定义:
然后生成一个C++类,让您加载、保存和访问这些数据。还可以生成Python、Java等。 |
3
3
这是我在C和C++中使用的一种技术,被称为“列表宏”。假设您有一个变量、错误消息、解释器操作码或任何需要编写重复代码的东西的列表。在您的例子中,它是类成员变量。 假设它是变量。将它们放入这样的列表宏中:
要声明变量,请执行以下操作:
现在,只需重新定义defvar和defarr,并实例化myvar,就可以生成任何类型的重复代码。 有些人觉得这有点刺耳,但我认为这是将预处理器用作代码生成器并完成Dry的一个非常好的方法。而且,list宏本身就变成了一个迷你DSL。 |
4
2
我可能会用一个记录混合来做类似的事情——在编译时自动地向类添加功能。
|
5
1
一般来说,如果将所有内容合并到一个宏中,然后利用booost预处理器库定义类,就可以完全完成所需的工作。看看我是如何实现mace-reflect宏的,它对整个类进行了部分专门化,并且必须在不同的部分中引用每个名称两次。 这与我如何在预处理器的帮助下自动将JSON解析为结构非常相似。 举个例子,我会这样翻译:
我现在可以从解析器“访问”name的成员:
如果您的对象可以表示为结构、数组、键值对和原语,那么这项技术工作得很好,并为我提供了与JSON/XML或您的自定义记录格式之间的即时序列化/反序列化。 https://github.com/bytemaster/mace/blob/master/libs/rpc/examples/jsonv.cpp |
6
0
我不太清楚你在找什么。
看起来您正试图创建一种机制来加载和访问任意布局的磁盘结构。这是准确的吗?(编辑:刚刚注意到“set”成员函数…所以我猜你在找完整的系列) 如果您使用的是*nix系统,那么在makefile中指定自己的编译器编译为.o(很可能是perl/python/您的脚本以调用gcc结束)是一个简单的解决方案。其他人可能知道在Windows上执行此操作的方法。 |
rookie · 检查函数模板的所有参数包参数是否属于int 1 年前 |
ivaigult · -W转换和隐式字符串到布尔类型转换 1 年前 |
rainer · 后台插入程序的初始化 1 年前 |
Community wiki · 以理智、安全和高效的方式复制文件 1 年前 |
Shefali Kanaujia · 对C中向量的向量进行排序++ 1 年前 |
Ma Joonyoung · 粗粒度和细粒度链表的时间比较 1 年前 |