Вградено игнориране в потоци

Има ли начин да игнорирате символи в C++ inline?

Например в този отговор, който чета в:

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