我的问题是关于程序回滚和存档兼容性的管理: 假设我用我的程序在版本 10 => archive.txt 中保存了一个 T 类型的对象。 如果我将程序回滚到以前的版本(比如说 5),我想检查(不尝试反序列化性能问题)1.30 中的 T 是否与 archive.txt 中保存的对象具有相同的“BOOST_CLASS_VERSION”。
简而言之:有没有办法检索存储在存档中的 T 的 BOOST_CLASS_VERSION?
我阅读了 boost 代码,但我没有找到“非常直接”的方法来做到这一点。 看来我必须获得 basic_iarchive_impl 的 cobject_id_vector ,但所有这些东西都是私有(private)的。 他们是另一种非侵入性的方式吗? (我所说的非侵入性是指:仅使用 boost 公共(public)内容,或者至少使用简单的继承来获取基类的 protected 成员?)。
提前致谢。
最佳答案
好吧,也许我太快发布了我的问题:在 boost 邮件列表上,他们回答:不。 但即使有可能,这也不是处理回滚和兼容性的可持续方式。
事实上,即使我的 T 类在程序版本中保持不变,也许 T 大学的成员也会改变:所以我必须检查所有成员以及他们的成员...版本:arf !!
最后,我们使用每个版本的程序编译的程序(“compatibility_checker”)来处理该问题:其目的是尝试加载存档,以检查兼容性。有时它很长,但至少很容易:当我从 10 回滚到 5 时,我检查版本 10 中创建的存档是否可以加载到“compatibility_checker”V5 中,它告诉我是否可以执行回滚这些数据。
关于serialization - Boost-serialization:如何在不加载的情况下检索存档中的类版本?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19449211/