オブジェクト グラフ (実際にはツリー) のシリアル化をCerealで実装しようとしています。
Cereal は、生のポインター (これらのポインターが指すオブジェクト) のシリアル化をサポートしていません。私の現在のアイデアはgetType()
、オブジェクトに関数を持たせてその型を見つけ、その型に応じてファクトリでそれらを構築することです。
正しいオブジェクトが作成されたら、アーカイブで初期化できます。
getType()
すべてのクラスがその関数から一意の型を返す必要があるため、これは明らかに理想的なソリューションではありません。
このアーキテクチャをどのように改善できますか?
template <class Archive>
void save( Archive & ar, const unsigned int version ) const
{
ar << _obj->getType();
ar << *_obj;
}
template <class Archive>
void load( Archive & ar, const unsigned int version )
{
ObjType type;
ar >> type;
_obj = Factory::createWithType(type);
_obj->load(ar, version);
}