Я сканирую текст с std::istream
. Сканирование уже идет, и я хотел бы извлечь строку, которая в данный момент читается (от начала до конца). Эта getCurrentLine()
функция не должна изменять позицию std::istream
.
Я написал этот фрагмент кода, который я нахожу довольно грязным. Есть лучший способ сделать это? (charStream_
это std::istream
)
std::string Scanner::getCurrentLine() const {
auto pos = charStream_.tellg();
// rewind until beginning of the line or stream
while (charStream_.peek() != '\n' && charStream_.tellg() != 0)
charStream_.unget();
// consume endline character
if (charStream_.peek() == '\n')
charStream_.get();
std::stringstream lineStream;
char c;
do {
c = static_cast<char>(charStream_.get());
lineStream << c;
} while (c != '\n' && c != EOF);
charStream_.seekg(pos);
return lineStream.str();
}