抱歉交叉发布。发布到邮件列表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工作正常。
答案 0 :(得分:1)
至少在Boost 1.48中有一个文件boost/serialization/vector_135.hpp
,并带有以下评论:
vector_135.hpp:与版本1.35兼容的stl矢量模板的序列化,它有一个错误
我认为你可以包含它而不是boost/serialization/vector.hpp
。当然,缺点是新的序列化载体在这种情况下也会处于那种错误的格式。
修改强>
对代码的简要研究表明,如果使用该文件,load()
将能够反序列化两种格式,但save()
将以新格式序列化。因此,唯一的缺点似乎是丑陋包括名称。