1. ホーム
  2. c++

[解決済み】streambuf::xsgetnと状態フラグ

2022-02-17 18:01:43

質問

保護された仮想メンバー関数 streambuf::xsgetn を抽出する関数を定義することができます。 n の文字を入力ストリームから取り出し、バッファに格納する。

通常、以下のようなほとんどの標準的なストリームでは fstreamこの関数は、単に {コード までのループで {コード {コード が返されます。 しかし、カスタムのストリームクラスはこの関数をオーバーライドして、データを出力バッファに一括コピーするなど、より効率的な処理を行うことができます。

しかし、私が理解していないのは、どのようにして sbumpc EOF 条件に達したことを示すために取得します。 ユーザーが100バイトの読み込みを要求し、ストリームには50バイトしか残っていないとする。 おそらく {コード は、50バイトを読み込んで {コード に設定し、内部ストリームの状態を eof.

ただし xsgetn のメンバー関数です。 xsgetnそして、それはストリームの状態を設定する方法を持ちません。 また 50を返すことができます。 eof は、EOF条件を処理することになっているのでしょうか?

どのように解決するのですか?

libstdc++で見つけたものです。

xsget

抽出された文字が要求された文字数より少ない場合、この関数は streambuf を実行し、さらに文字を取得する。もしその関数が sbumpc の場合、単に0文字が抽出されたか否かを返す。関数呼び出しの結果は、ストリーム状態にアクセスできる上位のストリーム操作によってピックアップされ、それに応じて設定されます。