ASCII 文字列への定数 char* ポインタが与えられた場合、データを読み取る解決策を考案できますかファイルからストリーミングしているかのように?重要な要件は、データが変更されないことです。
解決策は、カスタム ストリーム バッファを作成することです。カスタム実装は次のとおりです。
#include <streambuf> #include <istream> struct membuf: std::streambuf { membuf(char const* base, size_t size) { char* p(const_cast<char*>(base)); // Casting for interface compatibility 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)) {} };
このカスタム バッファーを使用すると、定数データをラップした入力ストリームを作成できます。
// data points to a string "42 3.14 blah" imemstream in(data, data_size); int x; float y; std::string w; in >> x >> y >> w;
このアプローチにより、次のことが可能になります。コピーが必要な文字列ストリームとは異なり、元のデータを変更することなく定数メモリから読み取ることができます。
以上がカスタム ストリーム バッファーを使用して、ファイルからストリーミングしているかのように定数メモリからデータを読み取ることはできますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。