3

環境

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。再度の質問: アーカイブ オブジェクト (アーカイブ ファイルからエラーなしで構築) のみを使用して、このキーを取得するにはどうすればよいですか?

4

1 に答える 1