向量(反)序列化与Boost.serialization的向后兼容性

时间:2011-11-29 16:27:22

标签: c++ serialization boost

抱歉交叉发布。发布到邮件列表boost-users后一周没有任何回复我倾向于在stackoverflow发布问题。 原帖,稍加重新编辑:

嗨列表,

我正在从Boost v1.35迁移到新版本。但是,我有一些 遗留的序列化字符串,我想让新版本可读。

经过一些测试后,我发现显然是新版本(在此 情况1.40但后来)无法从1.35正确反序列化std :: vector实例 生成的字符串任何人都可以给我一个关于可能是什么的指针 问题在这里?

非常感谢!

Ewald的

==详细==

我使用文本存档和gcc版本4.4.1(Ubuntu 4.4.1-4ubuntu9)

测试向量是一个包含2个项目的结构,长整数为1和2。

各个lib版本的存档字符串:

1.35:archive: 22 serialization::archive 4 2 1 2
1.40:archive: 22 serialization::archive 5 2 0 1 2

现在:

// includes
#include <boost/serialization/vector.hpp>
#include <boost/archive/text_iarchive.hpp>
#include <boost/archive/text_oarchive.hpp>

std::vector<long> testvector;
std::string val = "22 serialization::archive 4 2 1 2"; // v1.35 archive
{
std::stringstream ss(std::stringstream::in | std::stringstream::out);
ss << val << std::endl;
boost::archive::text_iarchive ia(ss);
ia >> BOOST_SERIALIZATION_NVP(testvector);
}

使用lib v1.40执行时的结果:testvector包含两个元素, {2, 2} - 而不是{1, 2}

注意:具有相同lib版本的s11n和de-s11n工作正常。

1 个答案:

答案 0 :(得分:1)

至少在Boost 1.48中有一个文件boost/serialization/vector_135.hpp,并带有以下评论:

  

vector_135.hpp:与版本1.35兼容的stl矢量模板的序列化,它有一个错误

我认为你可以包含它而不是boost/serialization/vector.hpp。当然,缺点是新的序列化载体在这种情况下也会处于那种错误的格式。

修改

对代码的简要研究表明,如果使用该文件,load()将能够反序列化两种格式,但save()将以新格式序列化。因此,唯一的缺点似乎是丑陋包括名称。