vector やElement
s をメモリから直接書き込まない限り、問題ありません。POD (プレーン オールド データ) ではないものはすべてシリアル化する必要があります。それはあなたの場合です:vector
そしてstring
。
の関数を作るだけなので、ベクトルは簡単ですElement
。しかし、ベクトル サイズをシリアル化したい場合があります。
ofstream& WriteVec( ofstream& s, vector<Element> &elem )
{
size_t size = elem.size();
s.write( (char*)&size, sizeof(size) );
for( int i = 0; i < size; i++ )
elem(i).Write(s);
return s;
}
あなたの要素のために:
ofstream& Element::Write( ofstream& s )
{
// Serialize pathName
size_t strsize = pathName.size();
s.write( (char*)&strsize, sizeof(strsize) );
s.write( pathName.c_str(), strsize );
// Serialize other stuff
s.write( (char*)&offsitePtr, sizeof(offsitePtr) );
s.write( (char*)&subPage, sizeof(subPage) );
}
そして、あなたは読むときに似たようなことをします。それを解決するのはあなたに任せます =) いずれの場合も、サイズを書いてからデータを書いていることに注意してください。読むときは、サイズを読み込んでから、内容を読み込む前に構造のサイズを変更します。
ああ、ファイル ストリームをバイナリ モードで開いていることを確認してください。