Я использую C ++ streambuf
класс для проекта компилятора и нужен удобный способ получить текущую позицию в потоке.
Есть две функции-члена, streambuf::pubseekpos
и streambuf::pubseekoff
, чтобы изменить позицию, и я довольно смущен отсутствием streambuf::pubgetpos
функция-член (или что-то подобное), чтобы прочитать его.
Кажется, есть два возможных обходных пути:
Я мог бы сохранить текущую позицию в отдельной переменной и изменить
это вручную всякий раз, когда я читаю символы из потока.
Я мог позвонить streambuf::pubseekoff(0, ios_base::cur)
, который возвращает
новая позиция потока.
Второй вариант кажется пригодным для использования, но неэффективным и неэстетичным для такой тривиальной задачи. Есть ли лучший способ сделать это?
streambuf
не имеет отдельного интерфейса для чтения позиции. Тем не мение, istream
а также ostream
делать (tellg
а также tellp
соответственно).
Интересно, что потоки используйте ваш вариант 2 чтобы получить свои позиции, так что это просто нормально.
Других решений пока нет …