【问题标题】:Boost serialization: how to choose version at runtime?Boost序列化:如何在运行时选择版本?
【发布时间】:2011-04-18 16:15:05
【问题描述】:

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

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

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

【问题讨论】:

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


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

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

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

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

      可以在Protocol Buffers 中获得开箱即用的前向兼容性

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2017-06-22
        • 2010-10-08
        • 2020-08-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-06-07
        相关资源
        最近更新 更多