Получить тип enum для класса, используя cin

Я хотел бы предложить пользователю сообщить мне, в каком жанре находится книга. Я подумал, что, вероятно, мог бы дать пользователю меню, в котором они вводят цифру для любого выбора. Я хотел знать, можете ли вы просто ввести имя пользователя как строку для жанра?

class Book
{
public:

    enum Genre
        {
        fiction,
        nonfiction,
        periodical,
        biograhpy,
        children
        };

    //...

    void get_genre();

    //...


private:

    //...
    Genre      genre;

};

//========================================================================================
//========================================================================================
void Book::get_genre()
{   



return;

}

person user2904033    schedule 18.11.2013    source источник
comment
В качестве примечания: вы не должны использовать std::cin в своем методе get_genre(), а просто вернуть туда свой член genre. Предоставьте соответствующий метод установки и используйте std::cin вне класса вместе с установкой.   -  person πάντα ῥεῖ    schedule 18.11.2013
comment
Дубликат stackoverflow.com/questions/7163069/c-string-to-enum   -  person IdeaHat    schedule 18.11.2013


Ответы (1)


Вам придется самостоятельно сопоставлять имена значений перечисления с их значениями. Вы можете использовать std::map<string, Genre> или std::unordered_map<string, Genre> (если доступно c++11). Невозможно преобразовать имя значения в его значение в C++.

person Ivaylo Strandjev    schedule 18.11.2013
comment
Вы имеете в виду что-то вроде получения строки от пользователя, а затем сопоставления ее с типами жанра в переключателе или операторе if? - person user2904033; 18.11.2013
comment
@user2904033 user2904033 При использовании std::map нет необходимости иметь if или switch для сопоставления значений. - person πάντα ῥεῖ; 18.11.2013
comment
@user2904033 user2904033 Я имел в виду карту, поскольку решение более динамично, и таким образом проще добавить другое значение для перечисления. Тем не менее оператор switch является хорошим решением, но его сложнее расширить. - person Ivaylo Strandjev; 18.11.2013