C++ でクラスをシリアル化する方法はありますか? クラスのインスタンスではなく、クラス自体を指しています。逆シリアル化するとき、どのクラスをインスタンス化して逆シリアル化を呼び出すかわかりません。どのクラスが表されているかをどうにかして判断し、その空のインスタンスをインスタンス化してから、逆シリアル化を呼び出すことができるようにしたいと考えています。
明確にするために編集:
各キーが厳密に型指定された値を持つキー値構造を作成しています。(一部のキーは文字列を格納する必要があり、他のキーは int を格納する必要があり、さらに他のキーは任意の値を格納する場合があります)。テンプレートを介してコンパイラによってこれが強制されるシステムを考案しました。
Key クラスには 2 つのテンプレート パラメータがあります。
- UniqueClass - 概念ごとに 1 つの一意のクラスが必要です (通常、概念を定義するプリプロセッサ関数で定義されます)。
- ValueType - これは、この概念の値がなければならないクラスです
Value クラスは、抽象スーパークラスを持つ ValueType のみを持つテンプレート化されたクラスであるため、その中に任意のクラスをラップできます (boost::any に似ています)。
次に、Key-Value 構造に、ConceptType と ValueType でテンプレート化されたストア関数と取得関数があります。
template<UniqueClass, ValueType>
void store( Concept<UniqueClass, ValueType> concept, ValueType value );
コンセプトの値の型と渡された値を記述するために同じテンプレートを使用しているため、それらが一致しない場合、コンパイラは文句を言います。
Key-Value ストアをシリアル化できるようにしたいと考えています。したがって、テンプレート化されたコンセプト クラスを何らかの方法でシリアル化し、逆シリアル化中に正しい任意のクラスをインスタンス化する必要があります。
私はシリアライズを呼び出すことができ、適切なすべてのオブジェクトが自分自身をシリアライズするように求められるようにしています。