提升序列化:如何在运行时选择版本?

时间:2011-04-18 16:15:05

标签: c++ serialization boost versioning boost-serialization

我正在使用Boost Serialization序列化数据成员,以便从一个组件传输到另一个组件。该文档讨论了如何将类版本机制用于unserialize both older and newer versions of a class

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

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

2 个答案:

答案 0 :(得分:2)

无法动态影响Boost.Serialization使用的类型版本,因为它是编译时常量(如您所述)。您需要添加自己的版本控制方案来处理这种特殊情况。

答案 1 :(得分:1)

您所说的是向前(或向上)兼容性。即使您所做的一切都是添加新的类成员,您仍然无法使用标准的增强存档来提高兼容性。

boost xml存档有一个patch,它会跳过新的未知字段。这样,您可以在添加新类成员时获得兼容性。

另一个是第三方ptree archive。它将数据存储到boost :: property_tree :: ptree,您可以将其写为json。它会在加载时忽略未知的新字段。

可以在Protocol Buffers

中的框中提升兼容性