7

istream生メモリ バッファから直接読み取るを作成しようとしています。

ここの別の投稿でこれを行う良い方法を見つけました:

  class membuf : public basic_streambuf<char>
  {
  public:
      membuf(char* p, size_t n) {
          setg(p, p, p + n);
      }
  };

次に、istreamこれを使用して作成しますmembuf

    membuf mb(dataPointer, dataLength);
    istream reader(&mb);

getline()次に、 and>>演算子の使用を読みましたが、すべてが素晴らしいものでした。seekg()ただし、バッファの先頭に巻き戻すために使用できないようで、istream::tellg()常に を返します-1

これらを機能させるには、さらにコードを書く必要がありますか、それとも失敗する運命にありますか?

4

1 に答える 1

7

関数tellgおよびseekgは、保護された仮想関数seekoffとに依存します。これは、クラスseekposに実装する必要があります。membuf

のデフォルトは、すべての呼び出しに対してbasic_streambuf返されるだけpos_type(off_type(-1))です(多くの実装では-1に等しい場合があります)。

于 2011-07-20T14:53:51.687 に答える