istream :: tellg () возвращает -1, когда используется с моим настраиваемым классом streambuf?

Я пытаюсь создать istream , который читает непосредственно из необработанного буфера памяти.

Я нашел хороший способ сделать это в другом сообщении здесь:

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

Затем Я создаю свой istream , используя этот membersuf :

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

Затем я читаю с помощью операторов getline () и >> , и все замечательный. Однако я не могу использовать seekg () для перемотки назад в начало моего буфера, а istream :: tellg () всегда возвращает -1 .

Нужно ли мне написать еще код, чтобы заставить их работать, или это обречено на неудачу?

5
задан Lightness Races with Monica 20 July 2011 в 15:23
поделиться