3

我正在使用Boost 序列化来序列化数据成员,以便从一个组件传输到另一个组件。该文档讨论了如何使用类版本机制来反 序列化一个类的旧版本和新版本

我的用例略有不同。在某些情况下,新版本的代码会将对象发送到旧版本。旧版本没有新定义,因此它无法使用该机制来读取新版本。相反,我想以编程方式设置 Boost 类版本,并在连接到旧客户端时生成旧版本的类。问题是该版本似乎在编译时设置为静态常量。

我可以使用 Boost 提供的工具来完成此操作,还是必须将自己的版本信息添加到类的每个实例中?

4

2 回答 2

3

没有办法动态影响 Boost.Serialization 使用的类型版本,因为它是一个编译时间常数(正如你提到的)。您需要添加自己的版本控制方案来处理这种特殊情况。

于 2011-04-18T23:23:57.833 回答
2

您所说的是向前(或向上)兼容性。即使您所做的一切都是添加新的类成员,那么您仍然无法使用标准的 boost 档案获得前向兼容性。

有一个用于 boost xml 存档的补丁,它将跳过新的未知字段。这样,您将在添加新的类成员时获得前向兼容性。

另一个是 3rdparty ptree 存档。它将数据存储到 boost::property_tree::ptree,您可以将其写为 json。加载时它将忽略未知的新字段。

可以在协议缓冲区中开箱即用地获得前向兼容性

于 2017-11-27T17:32:43.170 回答