2

我的问题是关于程序回滚和存档兼容性的管理:假设我在版本 10 => archive.txt 中保存了一个类型为 T 的对象和我的程序。如果我将程序回滚到以前的版本(比如说 5),我想检查(不尝试反序列化以解决性能问题)1.30 中的 T 是否与 archive.txt 中保存的对象具有相同的“BOOST_CLASS_VERSION”。

简而言之:有没有办法检索存储在存档中的 T 的 BOOST_CLASS_VERSION ?

我阅读了 boost 代码,但我没有找到一种“非常直接”的方法来做到这一点。看来我必须得到 basic_iarchive_impl 的 cobject_id_vector,但所有这些东西都是私有的。他们是另一种非侵入性的方式吗?(通过非侵入性我的意思是:只使用 boost public 的东西,或者至少使用简单的继承来获得基类的受保护成员?)。

提前致谢。

4

1 回答 1

2

好的,也许我太快地发布了我的问题:在提升邮件列表上,他们回答:不。但即使有可能,它也不是处理回滚和兼容性的可持续方式。

事实上,即使我的班级 T 在程序版本上保持不变,也许 T 的成员 U 会改变:所以我必须检查所有成员,以及他们的成员......版本:arf !

最后,我们用每个版本的程序编译的程序(“compatibility_checker”)来处理这个问题:它的目的是尝试加载档案,检查兼容性。有时它很长,但至少很容易:当我从 10 回滚到 5 时,我检查是否可以在“compatibility_checker”V5 中加载在版本 10 中创建的存档,它告诉我是否可以执行回滚那些数据。

于 2013-10-18T19:30:55.940 回答