3

を使用して「バージョン管理された」シリアライゼーションを作成する方法について、以前にこの質問をしましたboost::serialization::access

やりたいことのいくつかはできましたが、重大な制限があるようです。

具体的には、実行時にバージョンを変更し、シリアル化バージョンをコード内で動的に変更できるようにしたいと考えています。

ただしマクロは

BOOST_CLASS_VERSION(ClassName, ver)

このタイプの動作は許可されていないようです。

さまざまなクラスを作成し、それぞれが必要なときにそれぞれを使用できると思いますが、それには多くのコード変更が必要になるため、そうしないことをお勧めします。

同じ実行中に異なるバージョンを使用するようにクラスをプログラムで変更する方法はありますか?

何をする必要があるかについてもう少し説明します。

私が取り組もうとしているユースケースは、プログラムが古いバージョンで読み取り (最初に実行/アップグレードされたとき)、次に新しいバージョンで書き込み、その新しいバージョンも読み取ることができるというものです。

4

1 に答える 1

1

バージョンを動的に変更しないように設計されているようです。ただし、 serializesave、またはload関数のversionパラメータを介して古いデータの読み取りをサポートすることは可能です。つまり、ロード機能でバージョンを確認し、特定のパーツを別の方法でロードする必要があるかどうかを確認できます。そのため、古いデータをロードすることは可能ですが、シリアル化関数の 1 つのセット内で実行する必要があります。

于 2012-05-16T15:06:21.913 に答える