C++ boost二进制序列化库是向后/向前兼容吗?

And*_*rew 12 c++ serialization boost

可能重复:
Boost序列化库升级

我正在尝试为C++应用程序找到序列化解决方案.我真的希望能够使用boost二进制序列化.如果我使用较旧版本的boost二进制序列化序列化对象,那么使用较新版本的boost库的应用程序是否总能读取它?反过来呢?boost对序列化库的向后/兼容性的理念是什么?

Ale*_*x B 10

他们通过增加标题中的版本来实现.所以,是的,它在某种意义上是兼容的,如果你试图读取用不兼容版本序列化的二进制数据,你会得到一个优雅的失败,因为1.45.0发行说明往往表明.此外,1.42和1.43中的错误打破了它!

在版本1.42和1.43下创建的本机二进制存档存在严重问题.这个最新版本可能无法读取它们.这是由于1.42对某些类型的二进制格式进行了一些更改.通常,可以通过检测写入归档头中的库版本号来解决此问题.不幸的是,这个库版本号没有增加到1.42.所以现在我们有两个不同的二进制存档版本,它们具有相同的库版本号.

我个人会更加相信Google Protocol Buffers,它明确地保持向后兼容性:

您可以在不破坏向后兼容性的情况下为邮件格式添加新字段; 旧的二进制文件在解析时只是忽略新字段.

但是,它需要在构建系统方面付出更多努力,因为它涉及使用自动生成的代码.