2

私の質問は、プログラムのロールバックとアーカイブの互換性の管理に関するものです。バージョン 10 => archive.txt のプログラムでタイプ T のオブジェクトを保存したとしましょう。プログラムを以前のバージョン (たとえば 5) にロールバックする場合、1.30 の T が archive.txt に保存されたオブジェクトと同じ "BOOST_CLASS_VERSION" を持っているかどうかを (パフォーマンスの問題のためにデシリアライズしようとせずに) チェックしたいと思います。

簡単に言うと、アーカイブに保存されている T の BOOST_CLASS_VERSION を取得する方法はありますか?

ブーストコードを読みましたが、それを行うための「非常に直接的な」方法が見つかりませんでした。basic_iarchive_impl の cobject_id_vector を取得する必要があるようですが、これらはすべて非公開です。それを行うための別の非侵入的な方法はありますか?(邪魔にならないということは、ブーストパブリックのものだけを使用するか、少なくとも単純な継承を使用して基本クラスの保護されたメンバーを取得することを意味します)。

前もって感謝します。

4

1 に答える 1

2

OK、私の質問の投稿が早すぎたのかもしれません。Boost メーリング リストでは、「いいえ」との回答がありました。しかし、たとえそれが可能であったとしても、ロールバックと互換性を処理するための持続可能な方法ではありません。

実際、私のクラス T がプログラムのバージョン間で同じままであっても、T のメンバー U が変更される可能性があります: そのため、すべてのメンバーとそのメンバーを確認する必要があります... バージョン: arf !!

最後に、プログラムの各バージョンでコンパイルされたプログラム ("compatibility_checker") で問題を処理します。その目的は、アーカイブをロードして互換性をチェックすることです。かなり長い場合もありますが、少なくとも簡単です: 10 から 5 にロールバックするとき、バージョン 10 で作成されたアーカイブを「compatibility_checker」V5 にロードできるかどうかを確認し、ロールバックを実行できるかどうかを教えてくれますそれらのデータ。

于 2013-10-18T19:30:55.940 に答える