Встроенный игнор в потоках

Есть ли способ игнорировать символы во встроенном C++?

Например, в этом ответе я читаю:

istringstream foo("2000-13-30");

foo >> year;
foo.ignore();
foo >> month;
foo.ignore();
foo >> day;

Но я хотел бы иметь возможность сделать все это встроенным:

foo >> year >> ignore() >> month >> ignore() >> day;

Я думал, что это возможно в C++, но он определенно не компилируется для меня. Может быть, я помню другой язык?


person Jonathan Mee    schedule 02.04.2015    source источник


Ответы (1)


foo.ignore() — это функция-член, поэтому ее нельзя использовать в качестве манипулятора. У него также нет правильного типа возвращаемого значения и объявления параметра, которые можно было бы использовать как единое целое. Однако вы можете легко сделать свой собственный:

std::istream& skip(std::istream& is) {
    return (is >> std::ws).ignore();
}

foo >> year >> skip >> month >> skip  >> day;
person 0x499602D2    schedule 02.04.2015
comment
+1, я собирался предложить то же самое. Но будьте осторожны, он смешивает форматированный ввод (>> year и т. д.) с неформатированным вводом (ignore()), используя синтаксис, обычно зарезервированный только для форматированного ввода. - person Angew is no longer proud of SO; 02.04.2015