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

4
我正在使用Boost Serialization对数据成员进行序列化,以便从一个组件传输到另一个组件。文档讨论了如何使用类版本机制来反序列化旧版和新版的类
我的用例略有不同。在某些情况下,新版本的代码将向旧版本发送对象。旧版本没有新定义,因此它将无法使用该机制读取新版本。相反,我想以编程方式将Boost类版本设置回并在连接到旧客户端时生成旧版本的类。问题是,似乎版本是在编译时作为静态常量设置的。
我可以使用Boost提供的工具完成这个任务吗?还是我必须在每个类实例中添加自己的版本信息?
2个回答

3

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


2
您所说的是向前(或向上)兼容性。即使您所做的一切都是添加新类成员,使用标准的boost存档仍然无法实现向前兼容性。
有一个用于boost xml存档的补丁,它将跳过新的未知字段。这样,当添加新类成员时,就可以获得向前兼容性。
另一个是第三方ptree存档。它将数据存储到boost::property_tree::ptree中,您可以将其写成json格式。在加载时,它会忽略未知的新字段。
Protocol Buffers中,可以直接获得向前兼容性。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接