定数メモリからの入力ストリームの作成: データ変更制限の克服
データ変更を行わずに定数メモリ バッファからデータを読み取る問題に対処するにはこれを変更するには、カスタム ストリーム バッファを作成する必要があります。これは、標準の std::streambuf を継承し、その関連関数をオーバーライドするクラスを定義することで実現できます。
具体的には、以下で定義された membuf クラスがストリーム バッファーとして機能します。
struct membuf: std::streambuf { membuf(char const* base, size_t size) { char* p(const_cast<char*>(base)); this->setg(p, p, p + size); } };
このクラスは、提供されたデータ バッファーとそのサイズを使用してストリーム バッファーを設定し、基本的に読み取られるデータの範囲を定義します。
このバッファーに基づいて入力ストリームを作成するには、imemstream クラスを定義します。 membuf と std::istream:
struct imemstream: virtual membuf, std::istream { imemstream(char const* base, size_t size) : membuf(base, size) , std::istream(static_cast<std::streambuf*>(this)) { } };
の両方から継承します。このクラスは基本的にカスタム ストリーム バッファーをラップし、入力ストリームの機能を提供します。 imemstream を通常の入力ストリームとして使用できるようになりました。
imemstream in(data, size); in >> value;
この手法を利用すると、ストリームから来るかのように定数メモリ バッファからデータを読み取ることができ、元の問題を効果的に解決できます。データの不変性を維持しながら。
以上がデータを変更せずに定数メモリ バッファからストリームを作成するにはどうすればよいでしょうか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。