ホームページ  >  記事  >  バックエンド開発  >  データを変更せずに定数メモリ バッファからストリームを作成するにはどうすればよいでしょうか?

データを変更せずに定数メモリ バッファからストリームを作成するにはどうすればよいでしょうか?

Linda Hamilton
Linda Hamiltonオリジナル
2024-11-09 08:15:02480ブラウズ

How Can You Create a Stream from a Constant Memory Buffer Without Altering the Data?

定数メモリからの入力ストリームの作成: データ変更制限の克服

データ変更を行わずに定数メモリ バッファからデータを読み取る問題に対処するにはこれを変更するには、カスタム ストリーム バッファを作成する必要があります。これは、標準の 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 サイトの他の関連記事を参照してください。

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