1

私はこのようなC++オブジェクトを持っています

class myClass
{
    vector<OtherClass*> otherClassVector;
    AnotherClass* anotherClassObj;
    // A few other primitive types and functions
}

これをディスクに保存し、プログラムで読み戻すための最良の方法は何ですか?バイナリモードでfstreamの読み取り/書き込みを使用できますか?または、ブーストシリアル化を使用する必要がありますか?なぜ?保存されたファイルが人間が読める形式である必要はありません。

4

3 に答える 3

6

使用するboost::serializationのは、独自のシリアライザーを作成するよりも簡単です。OtherClassが具象型(ベースではない)の場合-読み取り/書き込みによるシリアル化は簡単です。ベクトルの場合-サイズと配列よりも保存し(myClassに非POD型がない場合)、ポイントがanotheClassObjポインターである要素を格納します...

于 2012-07-31T07:31:31.960 に答える
3

ofstream f("filename", std::ios::binary);オブジェクトがPODタイプである場合にのみ、オブジェクトをシリアル化できます。

それ以外は手動で処理する必要があります。簡単な例として、オブジェクトにポインターが含まれている場合、それらが指すデータではなく、それらのアドレスが保存されます。

より複雑なタイプの場合は、完全に手動でシリアル化するか(クラスからすべてのPODデータを保存し、すべての「特別な」データでトリッキーなことを行うクラスまたは関数を作成する)、またはブーストシリアル化を使用する必要があります。

于 2012-07-31T07:30:36.380 に答える
0

C++_ミドルウェアライターが興味深いかもしれません。他のアプローチに比べていくつかの利点があります。

于 2012-08-05T04:19:15.597 に答える