serialization - Boost-serialization:如何在不加载的情况下检索存档中的类版本?

标签 serialization boost boost-serialization

我的问题是关于程序回滚和存档兼容性的管理: 假设我用我的程序在版本 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/

相关文章:

c++ - boost 从结构列表派生的结构的序列化

c++ - boost 是否支持 c++11 的 std::tuple 的序列化?

c++ - boost 序列化: Transition from versioned class to object_serializable

c# - 通过序列化将数据从 C# 传输到 Java

php - 如何通过 jQuery Ajax 调用使用 GET 方法对发送到服务器的序列化数组进行反序列化?

c++ - 以高效的方式创建、访问、存储和加载 boost::bimap

c++ - 将 listS 用于顶点和边列表时无法调用 boost::clear_vertex

c++ - boost::scoped_array 上的_BLOCK_TYPE_IS_VALID 错误

java - 如何安全地序列化 lambda?

c# - 序列化包含 List<T> 的 List<T>