Да, я использую оператор >> (хотя не так часто, как оператор <<). Это очень полезно для синтаксического анализа определенных пользователем типов в их соответствующих объектах и, следовательно, для централизации анализа и необходимой обработки ошибок. Это также очень полезно для анализа строкового представления перечислимого типа. </p>
Например, рассмотрим перечислимый тип, представляющий фрукт. Вы можете использовать оператор >> для анализа строки (например, «яблоко», «банан» и т. Д.), Чтобы получить правильное значение перечисления.
std::istream &operator>>(std::istream &is, Fruit &fruit)
{
std::string str;
is >> str;
if (str == "apple")
fruit = APPLE;
else if (str == "banana")
fruit = BANANA;
// other fruits
else
is.setstate(std::ios::failbit);
return is;
}
Обратите внимание также на использование метода setstate в istream для установки состояния отказа потока при обнаружении неизвестной строки. При использовании этого оператора вы можете проверить состояние отказа потока следующим образом:
Fruit fruit;
std::cin >> fruit;
if (std::cin.fail())
std::cout << "Error: Unknown Fruit!" << std::endl;