2011-04-18 42 views
2

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

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

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

回答

2

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

0

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

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

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

一个人可以在一个盒子里获得向前兼容Protocol Buffers