抱歉发帖重复了。在发到 Boost 用户邮件列表后一个星期没有任何回复后,我倾向于在 Stack Overflow 上发帖。
大家好,
我正在从 Boost v1.35 迁移到新版本。但是,我有一些旧的序列化字符串,我希望新版本能够读取这些字符串。
经过一些测试,我发现新版本(这里是 1.40,但也包括以后的版本)似乎无法正确反序列化从 1.35 生成的 std::vector 实例。有人能给我指点一下问题出在哪里吗?
非常感谢!
Ewald
==详情==
我使用文本存档,gcc 版本为 4.4.1(Ubuntu 4.4.1-4ubuntu9)
测试向量是一个包含两个长整数 1 和 2 的结构体。
各库版本的存档字符串:
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}
注意:使用相同库版本的s11n和de-s11n完美运行。