3

私は現在、その内部で従来の C 配列 (unsigned char[]) でデータを保持するカスタム バッファ クラスを扱っています。

そのバッファへのより快適な読み取り/書き込みアクセスを取得するために、POD コンテンツに直接接続されている std::istream オブジェクトを構築する方法を探していました... 別名 C 配列メモリ。目標は、すべての std::stream フォーマッタを使用することであり、実際のデータ「lorem ipsum」をバッファに直接書き込む必要があります。だから、このようなもの:

std::istream QuirkyBuffer::getIStream() { return std::istream(this->ptr, this->size); }

QuirkyBuffer d;
auto is = d.getIStream();
"lorem ipsum" >> is;

それは可能ですか?

4

2 に答える 2

2

これに使えますstd::ostrstream。廃止されましたが、その有用性を考えると、すぐになくなるとは思えません。

それ以外の場合は、独自の を作成するのは非常に簡単omemstreamです。

于 2013-02-04T14:04:33.177 に答える
1

istream は問題ではありません。問題はストリーム バッファの作成です。たとえば、ifstream は istream から派生した単なるクラスであり、ストリーム バッファといくつかのグルー コードが含まれているためです。ここで、ストリーム バッファを書き込むために、プライベート仮想入力関数をオーバーライドする必要があります。underflow() と uflow() でも十分だと思いますが、これらのキーワードを使用すると、必要な情報を自分で見つけることができるはずです。

ところで: C++ 11 で変更されない限り、ストリームはコピー可能ではないため、値で返すことはできません。

于 2013-02-04T22:48:10.670 に答える