C++ 使用boost从二进制到xml序列化
我目前正在研究几个使用boost序列化和二进制存档的类,使用:C++ 使用boost从二进制到xml序列化,c++,xml,serialization,boost,binary,C++,Xml,Serialization,Boost,Binary,我目前正在研究几个使用boost序列化和二进制存档的类,使用: my_archive & my_variable; 但是,我想添加xml归档序列化支持,同时保持向后兼容性。出于这个原因,Boost强制(当然)使用nvp包装器 不幸的是,似乎不可能在同一个序列化函数中混合使用nvp()和直接二进制序列化(使用管理版本控制) 下面是我的代码到目前为止的样子: friend class boost::serialization::access; template<class Archi
my_archive & my_variable;
但是,我想添加xml归档序列化支持,同时保持向后兼容性。出于这个原因,Boost强制(当然)使用nvp包装器
不幸的是,似乎不可能在同一个序列化函数中混合使用nvp()和直接二进制序列化(使用管理版本控制)
下面是我的代码到目前为止的样子:
friend class boost::serialization::access;
template<class Archive>
void serialize(Archive & ar, const unsigned int version)
{
// serialize base class information
if (version == 4) {
ar & boost::serialization::make_nvp( "var", mVariable );
}
else if (version == 3) {
ar & mVariable;
}
}
使用xml存档调用&operator时,我在is_wrapper()上得到模板错误,因为我的一些序列化没有使用nvp wrapper
因此,这里是我的问题,是否有任何解决方法可以让我考虑版本号(在编译时知道),以调整序列化函数,使之在版本4中使用xml/binary,而在前一个版本中仅使用binary。您应该始终添加NVP包装器;它只是一个元数据注释,不用于二进制存档(或标准文本存档) 因此,对于二进制存档,您甚至不需要更改版本控制
ar & BOOST_SERIALIZATION_NVP(x);
// or
ar & boost::serialization_make_nvp("foo", x);
完全等同于
ar & x;
到目前为止,我知道您可以使用简单的make_nvp方式。二进制格式不关心插入的文本,应该继续工作
ar & x;