我正在使用Boost Serialization序列化数据成员,以便从一个组件传输到另一个组件。该文档讨论了如何将类版本机制用于unserialize both older and newer versions of a class。
我的用例略有不同。在某些情况下,较新版本的代码会将对象发送到旧版本。旧版本将没有新定义,因此它将无法使用该机制来读取较新版本。相反,我想以编程方式设置Boost类版本,并在连接到旧客户端时生成该类的旧版本。问题是看起来版本在编译时设置为静态const。
我可以使用Boost提供的工具完成此操作,还是必须将自己的版本信息添加到类的每个实例中?
答案 0 :(得分:2)
无法动态影响Boost.Serialization使用的类型版本,因为它是编译时常量(如您所述)。您需要添加自己的版本控制方案来处理这种特殊情况。
答案 1 :(得分:1)
您所说的是向前(或向上)兼容性。即使您所做的一切都是添加新的类成员,您仍然无法使用标准的增强存档来提高兼容性。
boost xml存档有一个patch,它会跳过新的未知字段。这样,您可以在添加新类成员时获得兼容性。
另一个是第三方ptree archive。它将数据存储到boost :: property_tree :: ptree,您可以将其写为json。它会在加载时忽略未知的新字段。
中的框中提升兼容性