1

オブジェクト グラフ (実際にはツリー) のシリアル化を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);
}
4

0 に答える 0