【发布时间】:2011-08-26 07:10:37
【问题描述】:
当我尝试通过文本存档反序列化之前使用 Boost 的更高版本(1.46 序列化和 1.38 反序列化)序列化的一些数据时,我遇到了异常“不支持的版本”。 .有没有办法降级(在代码中)序列化?
类似“set_library_version”的东西?
【问题讨论】:
标签: serialization boost archive
当我尝试通过文本存档反序列化之前使用 Boost 的更高版本(1.46 序列化和 1.38 反序列化)序列化的一些数据时,我遇到了异常“不支持的版本”。 .有没有办法降级(在代码中)序列化?
类似“set_library_version”的东西?
【问题讨论】:
标签: serialization boost archive
请参阅 Error read binary archive, created by old Boost version 邮件存档帖子,了解序列化错误。
它说下面的代码可以完成这项工作:
void load_override(version_type & t, int version){
library_version_type lvt = this->get_library_version();
if (boost::archive::library_version_type(7) < lvt){
this->detail_common_iarchive::load_override(t, version);
}
else
if (boost::archive::library_version_type(6) < lvt){
uint_least16_t x = 0;
* this->This() >> x;
t = boost::archive::version_type(x);
}
else
if (boost::archive::library_version_type(3) == lvt ||
boost::archive::library_version_type(5) == lvt){
#pragma message("CTMS fix for serialization bug (lack of backwards compatibility) introduced by Boost 1.45.")
// Up to 255 versions
unsigned char x = 0;
* this->This() >> x;
t = version_type(x);
}
else{
unsigned int x = 0;
* this->This() >> x;
t = boost::archive::version_type(x);
}
}
【讨论】:
使用 text_archive ...我最近也遇到了这个问题。 我最近在 Windows 上将 boost 从 1.67 升级到 1.72,在 Windows 上生成了一些数据。当我在仍在 Boost 1.67 上的 Linux 环境上运行数据时,它会抛出 not supported。
1.67 的标头看起来像这样
22 serialization::archive 16
和 1.72 看起来像
22 serialization::archive 17
我将 17 更改为 16,这对我的用例很满意。
【讨论】: