2

このリンクでは、ブーストのシリアライゼーションとデシリアライゼーションを見つけることができます。しかし、Deserialization メソッドでは、逆シリアル化するクラスの特定のオブジェクトを指定する必要があります。例: newg

gps_position newg;
{
    // create and open an archive for input
    std::ifstream ifs("filename");
    boost::archive::text_iarchive ia(ifs);
    // read class state from archive
    ia >> newg;
    // archive and stream closed when destructors are called
}

C++ には C# の Object のような基本クラスがないため、一般的なオブジェクトに逆シリアル化してから型キャストするにはどうすればよいですか?

いいえ、カスタム クラス呼び出しオブジェクトを作成し、そこから他のすべてのクラスを継承することはできますが、その場合でも 2 回デシリアライズする状況が発生します。この問題の回避策はありますか?

4

2 に答える 2

3

Boost.serialization には具象クラスを指定する必要があります。C++ には仮想コンストラクターがないため、デシリアライザーは作成するオブジェクトを認識している必要があります。共通の祖先も役に立ちません。逆シリアル化の前にオブジェクトを作成する必要があります。

クラス階層をシリアライズおよびデシリアライズする場合は、オブジェクトをシリアライズするときとデシリアライズするときにクラス Id を明示的に記述する必要があります。この Id を明示的に読み取って、どのオブジェクトを作成およびデシリアライズするかを決定します。

于 2012-10-24T05:58:41.143 に答える