c – Boost MPL生成对象序列化的代码?
发布时间:2020-12-16 10:19:05 所属栏目:百科 来源:网络整理
导读:我想生成序列化/反序列化代码 class Object{ string a; int b; long c; char d;}; 通过查看mpl序列,但我需要能够识别对象并将其检索回来,我无法弄清楚如何获取其成员的名称,我是否必须知道它? 代码应该是这样的 void SerializeObject(ostream os){ serializ
我想生成序列化/反序列化代码
class Object { string a; int b; long c; char d; }; 通过查看mpl序列,但我需要能够识别对象并将其检索回来,我无法弄清楚如何获取其成员的名称,我是否必须知道它? 代码应该是这样的 void SerializeObject(ostream os) { serialize(object.a,os); serialize(object.b,os); //serialize(object.member,os); } 我想用户生成上面的代码只定义一个对应于对象布局的mpl序列,是否可行,你能给我一些提示吗? 我的目标是: 用户定义mpl :: vector< String,int,long,char>对于上面的对象和我的元程序可以生成所需的编码. 解决方法
考虑一个boost :: fusion,并使用宏BOOST_FUSION_ADAPT_STRUCT()将您的结构提升为融合序列(随机访问),例如,一旦你定义了上面的结构,你可以做类似的事情
BOOST_FUSION_ADAPT_STRUCT( Object,(std::string,a) (int,b) (long,c) (char,d) ) 现在它已被提升,你可以简单地使用for_each迭代成员,例如: template<typename archive> struct serializer { serializer(archive& ar):ar(ar) {} template<typename T> void operator()(const T& o) const { ar & o; // assuming binary for example... } archive& ar; }; template<typename archive,typename sequence> void serialize(archive& ar,sequence const& v) { boost::fusion::for_each(v,serializer<archive>(ar)); } 要使用,它应该简单如下: Object foo; // instance to serialize serialize(<archive>,foo); (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |