ホームページ  >  記事  >  バックエンド開発  >  C で定数メモリから入力ストリームを作成する方法

C で定数メモリから入力ストリームを作成する方法

Linda Hamilton
Linda Hamiltonオリジナル
2024-11-10 16:49:02789ブラウズ

How to Create an Input Stream from Constant Memory in C  ?

定数メモリからの入力ストリームの作成

ストリームであるかのように定数メモリ バッファからデータを読み取るには、カスタム ストリーム バッファ作成することができます。このバッファは、その内容を変更せずに定数メモリの場所を参照します。

実装:

次のコードは、ストリーム バッファ 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 サイトの他の関連記事を参照してください。

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