Я бы хотел проверить, достиг ли конец std::istream
, не читая с него.
Я знаю, что могу проверить EOF следующим образом:
if (is >> something)
но у этого есть ряд проблем. Представьте, что есть много, возможно, виртуальных, методов / функций, которые ожидают, что std::istream&
передается в качестве аргумента
Это означало бы, что я должен выполнить «домашнюю работу» по проверке EOF в каждом из них, возможно, с другим типом переменной something
, или создать какую-то странную оболочку, которая будет обрабатывать сценарий вызова методов ввода.
Все, что мне нужно сделать, это:
if (!IsEof(is)) Input(is);
метод IsEof
должен гарантировать, что поток не будет изменен для чтения, так что строка выше эквивалентна:
Input(is)
относительно данных, прочитанных в методе Input
.
Если не существует общего решения, которое бы обозначало слово и std::istream
, есть ли способ сделать это для std::ifstream
или cin
?
EDIT:
Другими словами, следующее assert
должно всегда проходить:
while (!IsEof(is)) {
int something;
assert(is >> something);
}