2010-12-02 12 views
4

boost::serializationは、これらのオブジェクトが基本クラスへの参照/ポインタによってポイントされていても、最も派生したクラスの多型オブジェクトを直列化できます。これは仮想機能を必要としません。 は、存在する多型の種類について知る必要があります:オブジェクトのシリアル化にはArchive::register_typeを呼び出す必要があります。boost :: serialization Archive :: register_typeはどのように機能しますか?

This exampleは、型の登録方法とそのシリアル化方法を示しています。


これはどのように達成されたのでしょうか。
boost::serializationソースコードを見てみましたが、失敗しました。テンプレートのメタプログラミングではそれほど良くありません。

答えて

2

boost.serializationtypeid()または多型のオブジェクトの実際の型を返す一部のユーザー定義関数get_keyのいずれかを使用して、ポリモーフィッククラスを書き出すことができます。アーカイブTをシリアライズする方法を知っているオブジェクトにタイプ識別子(typeid(T)又はT::get_key()の結果のいずれか)にマッピングすることを可能にするテンプレートをインスタンス化するために供給されたタイプを使用して

register_type作品。

1

boost :: serializationは、C++のRTTI機能を使用してオブジェクトの種類を動的に決定します。

"typeid"関数を参照すると、基本クラスポインタのみを持つ場合でも、クラスの型をdinamicallyに判断できます。

http://en.wikibooks.org/wiki/C++_Programming/RTTI

+0

はい、私はRTTIが使用されたと推測しましたが、register_typeはどのように使用しますか? – peoro

関連する問題