環境
Boost シリアライゼーション ライブラリを使用して、システムのオブジェクトを保存および読み込みます。私はこのライブラリに関するプラクティスを定義したので、常に基本クラスからシリアル化します (シリアル化可能なすべてのクラスは から継承しISerializable
ます)。結果として、true_type (つまり、最も派生した型) は this_type (つまり、ISerializable
) とは異なり、true_type はアーカイブに格納されます。
私の質問
アーカイブ オブジェクトからのみ、この true_type (アーカイブに書き込まれた文字列として) を取得する方法は?
詳細
このクラスツリーを見てみましょう:
ISerializable <|-- B <|-- D
私が行った場合:
B* b = new D();
b->SaveToFile(path); // <= this will do the serialization `ar & this`
(`this` being a `ISerializable*`)
true_type "D" (アーカイブのタイプ: txt、bin、xml) と書かれたアーカイブを取得します。
オブジェクトとこのb
コード:
const boost::serialization::extended_type_info & true_type
= * boost::serialization::type_info_implementation<ISerializable>::type
::get_const_instance().get_derived_extended_type_info(*b);
私は欲しいものtrue_type.get_key()
、つまり「D」を持っています。すべてのアーカイブ保存に「D」が書かれていることが確認できますb
。再度の質問: アーカイブ オブジェクト (アーカイブ ファイルからエラーなしで構築) のみを使用して、このキーを取得するにはどうすればよいですか?