定数メモリからの入力ストリームの作成
ストリームであるかのように定数メモリ バッファからデータを読み取るには、カスタム ストリーム バッファ作成することができます。このバッファは、その内容を変更せずに定数メモリの場所を参照します。
実装:
次のコードは、ストリーム バッファ membuf と入力ストリーム imemstream を定義します。 membuf バッファーの利用:
#include <streambuf> #include <istream> struct membuf: std::streambuf { membuf(char const* base, size_t size) { char* p(const_cast<char*>(base)); this->setg(p, p, p + size); } }; struct imemstream: virtual membuf, std::istream { imemstream(char const* base, size_t size) : membuf(base, size) , std::istream(static_cast<std::streambuf*>(this)) { } };
このコードでは、membuf は定数の char ポインターとデータ サイズで初期化されます。このデータを指すように入力バッファ (setg) を設定します。 imemstream は membuf と std::istream の両方から継承し、定数メモリを入力ストリームに効果的にラップします。
使用法:
imemstream を使用するには、定数メモリ ポインタとサイズ:
imemstream in(data, size);
その後、通常どおりストリームからデータを読み取ることができます:
in >> x >> y >> w;
注: const_cast が必要なのは、std: :streambuf::setg には非 const char ポインタが必要です。ストリーム バッファはデータを変更しませんが、インターフェイスは「通常の」ストリーム バッファの柔軟性のためにこのタイプを必要とします。
以上がC で定数メモリから入力ストリームを作成する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。