ホームページ >バックエンド開発 >C++ >不変メモリから入力ストリームを作成するにはどうすればよいですか?

不変メモリから入力ストリームを作成するにはどうすればよいですか?

Susan Sarandon
Susan Sarandonオリジナル
2024-11-09 04:47:01537ブラウズ

How can I create an input stream from immutable memory?

不変メモリからの入力ストリームの構築

ソフトウェア開発では、内容をコピーしたり変更したりせずにメモリ バッファからデータを読み取ることが必要になることがよくあります。そのようなシナリオの 1 つは、データが定数文字ポインター (const char*) に格納される場合です。このようなバッファーからの便利な読み取りを可能にするには、入力ストリームを作成することが現実的な解決策です。

カスタム ストリーム バッファーを使用すると、不変メモリからの入力ストリームの作成が容易になります。実装方法は次のとおりです。

#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)) {
    }
};

const_cast&>ストリーム バッファーはデータを変更しないため、ストリーム バッファー内の () は必要ですが、インターフェイスには char が必要です。

ストリーム バッファーが作成されたら、それを使用して入力ストリームを初期化できます。そしてバッファからデータを読み取ります:

imemstream in(data, size);
int x;
float y;
std::string w;
in >> x >> y >> w;

以上が不変メモリから入力ストリームを作成するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。