【问题标题】:From binary to xml serialization using boost使用 boost 从二进制到 xml 序列化
【发布时间】:2015-09-05 01:37:17
【问题描述】:

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

my_archive & my_variable;

但是我想添加 xml 存档序列化支持,同时保持向后兼容性。出于这个原因,增强强制(当然)使用 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;
    }
}

BOOST_CLASS_VERSION(MyType, 4)

当使用 xml 存档调用 & 运算符时,我在 is_wrapper() 上收到模板错误,因为我的一些序列化没有使用 nvp 包装器。

所以这是我的问题,是否有任何解决方法可以让我了解版本号(在编译时知道)以调整序列化函数以将 xml/binary 用于版本 4,而对于前一个版本仅使用二进制。

【问题讨论】:

  • 到目前为止,我知道您可以简单地使用 make_nvp 方式。二进制格式不关心插入的文本,应该继续工作

标签: c++ xml serialization boost binary


【解决方案1】:

您应该始终添加 NVP 包装器;它只是一个元数据注释,它不用于二进制存档(或标准文本存档,就此而言)。

因此对于二进制存档,您甚至不需要更改版本控制

ar & BOOST_SERIALIZATION_NVP(x);
// or
ar & boost::serialization_make_nvp("foo", x);

完全等价于

ar & x;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-03-02
    • 2011-01-14
    • 1970-01-01
    • 2018-11-02
    • 1970-01-01
    • 2011-04-23
    • 2010-11-08
    • 1970-01-01
    相关资源
    最近更新 更多