Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 使用boost从二进制到xml序列化_C++_Xml_Serialization_Boost_Binary - Fatal编程技术网

C++ 使用boost从二进制到xml序列化

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

我目前正在研究几个使用boost序列化和二进制存档的类,使用:

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;