C++11 固有の機能についてはよくわかりませんが、一般的に C++ では、ストリームによってファイル I/O の操作がはるかに簡単になります。目的を達成するために、ストリーム挿入 (<<) およびストリーム抽出 (>>) 演算子をオーバーロードできます。演算子のオーバーロードについてあまり詳しくない場合は、このサイトの第 9 章で、多数の例とともに詳しく説明されています。これは、ストリームのコンテキストで << および >> 演算子をオーバーロードするための特定のページです。
私の言いたいことを説明させてください。いくつかのクラスを定義するとします:
- BinaryFileStream - 書き込みおよび (おそらく) 読み取りを行おうとしているファイルを表します。
- BinaryFileStreamHeader - ファイル ヘッダーを表します。
- BinaryFileStreamChunk - 1 つのチャンクを表します。
- BinaryFileStreamClosingHeader - 終了ヘッダーを表します。
次に、BinaryFileStream でストリーム挿入および抽出演算子をオーバーロードして、ファイル (またはその他の istream または ostream) を読み書きできます。
...
#include <iostream> // I/O stream definitions, you can specify your overloads for
// ifstream and ofstream, but doing so for istream and ostream is
// more general
#include <vector> // For holding the chunks
class BinaryFileStream
{
public:
...
// Write binary stream
friend const std::ostream& operator<<( std::ostream& os, const BinaryFileStream& bfs )
{
// Write header
os << bfs.mHeader;
// write chunks
std::vector<BinaryFileStreamChunk>::iterator it;
for( it = bfs.mChunks.begin(); it != bfs.mChunks.end(); ++it )
{
os << (*it);
}
// Write Closing Header
os << bfs.mClosingHeader;
return os;
}
...
private:
BinaryFileStreamHeader mHeader;
std::vector<BinaryFileStreamChunk> mChunks;
BinaryFileStreamClosingHeader mClosingHeader;
};
次に行う必要があるのは、データを適切なバイナリ表現に変換する BinaryFileStreamHeader、BinaryFileStreamChunk、および BinaryFileStreamClosingHeader クラスの演算子のオーバーロードを用意することだけです。
同様の方法でストリーム抽出演算子 (>>) をオーバーロードできますが、解析には追加の作業が必要になる場合があります。
お役に立てれば。