動的に割り当てられた配列を含む単純なクラスがあり、バイナリ ファイルに格納できるようにシリアル化する必要があります。配列のため、 sizeof(MyClass) を使用して単純にバッファを割り当てることはできません。
クラスは次のようになります。
class ReplayFrame
{
public:
// ...
private:
int dataType_;
int timeStamp_;
int frameNumber_;
size_t dataSize_;
char* data_;
};
そして、これが私が思いついた解決策です:
std::ostream& operator<< (std::ostream& out, const ReplayFrame& frame)
{
out.write((char *) &frame.dataType_, sizeof(int));
out.write((char *) &frame.timeStamp_, sizeof(int));
out.write((char *) &frame.frameNumber_, sizeof(int));
out.write((char *) &frame.dataSize_, sizeof(size_t));
out.write(frame.data_, frame.dataSize_);
return out;
}
これは問題ないように思えますが、 << 演算子の意味が若干変わります。std::ostream& ReplayFrame::serialize(std::ostream& out, const ReplayFrame& frame)
では、代わりに次のようなものが良いでしょうか?
または、serialize()
ストリームを使用せず、代わりにサイズとシリアル化されたオブジェクトへのポインターを返すメソッドが必要な場合があります。次のように、次のように自分で記述します。
ReplayFrame replayFrame;
int size;
char *frameSerialized = replayFrame.serialize(size);
fileStream.write(frameSerialized, size);
delete frameSerialized; // or frameSerialized.release() ?
ご覧のとおり、私はかなり混乱しているので、良い提案をお待ちしています。(注: 私は Qt を使用しており、boost も c++11 もありません)。