c++ - Boost序列化的向后兼容性问题1:73

标签 c++ serialization boost

我们使用boost序列化来读写数据,只是从boost 1:67切换到boost 1:73。
现在,我们无法读回以boost 1:67或更早版本写入的数据。我们得到一个archive_exception::input_stream_error异常。
检查文件将显示差异。旧文件开始于
22序列化::存档16
新文件缺少此数据。将其从文件中删除后,可以以1:73的速度读取。
但是奇怪的是,如果尝试一个小的示例程序(文档中的gps示例)也将boost 1:73生成此数据:
22序列化::存档18
您知道这些版本之间有什么更改,并且可能导致此问题吗?预先感谢您的任何提示。
我们的应用程序使用自己的派生存档类。也许我必须在那改变一些东西?
最好的祝福
Kai Benndorf

最佳答案

我自己找到了解决方法。
我们自己的文件来自例如boost::archive::text_iarchive_impl。
如果将以下代码添加到其构造函数中,它将再次起作用:

if(0 == (flags & boost::archive::archive_flags::no_header))
     init();
我在text_iarchive类中找到了这段代码,该类派生自text_iarchive_impl,这对我来说很奇怪。
这是一个错误,还是我应该使用另一个类来派生我们自己的存档?

关于c++ - Boost序列化的向后兼容性问题1:73,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62568739/

相关文章:

django 休息框架 : set field-level error from serializer validate() method

serialization - 在 F# 中序列化数据类型以通过网络使用

c++ - 如何简化 make_variant_over 生成的类型

c++ - 如何使用 CMake 将外部库( boost )包含到 CLion C++ 项目中?

c++ - 我可以控制调试器窗口中显示的 float 和 double 变量的位数吗?

c++ - 返回类型 std::optional<std::variant<...>>

c - 如何使用 msgpack-c 正确解包和提取数据?

c++ - boost::asio::async_read 在简单示例中 100% CPU 使用率

c++ - 空的和默认的构造函数和成员初始化

C++ 类型列表及其在列表中的别名