Ввод переменной типа enum с клавиатуры

У меня есть класс HealthyFood и enum Fruits{ apple, pear, peach, orange}. Я создаю в ранее сказанном классе переменную fruit типа данных Fruits и хочу создать сеттер для ее заполнения. Для этого мне надо как-то перегрузить оператор ввода, чтобы он строку преобразовывал в Fruits. Как это сделать?


Ответы (1 шт):

Автор решения: KoVadim

Попробуйте где то так

enum Fruits{ apple, pear, peach, orange};

std::istream& operator>>(std::istream& is, Fruits& f)
{
    std::string s;
    is >> s;
    if (s == "apple") f = Fruits::apple;
    else if (s=="pear") f= Fruits::pear;
    else if (s=="peach") f= Fruits::peach;
    else if (s=="orange") f= Fruits::orange;
    return is;
}

int main(){
    Fruits f;
    std::cin >> f;
}

если при этом хочется ещё и выводить в "красивом виде", тогда можно дописать оператор вывода

std::ostream& operator<<(std::ostream& os, const Fruits& f)
{
    switch (f) {
        case 0: { os << "apple"; break; }
        case 1: { os << "pear"; break; }
        case 2: { os << "peach"; break; }
        case 3: { os << "orange"; break; }
        default: {os << "------"; break;}
    }
    return os;
}

и теперь

Fruits f = pear;
std::cout << f;

будет работать так, как Вам хочется.

→ Ссылка