我想为
生成序列化/反序列化代码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>
对于上述对象和我的 metaprogram
可以生成需要的编码。
最佳答案
考虑一个 boost::fusion
,并使用宏 BOOST_FUSION_ADAPT_STRUCT()
将您的结构 boost 为 fusion 序列(随机访问),例如一旦你定义了上面的结构,你可以做类似的事情
BOOST_FUSION_ADAPT_STRUCT(
Object,
(std::string, a)
(int, b)
(long, c)
(char, d)
)
现在它已经被 boost 了,你可以简单地使用一个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);
关于c++ - boost MPL 以生成对象序列化代码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6022459/