Я столкнулся с этим вопросом, когда искал решение моей собственной проблемы для печати «слов» перечисления в C ++. Я вернулся, чтобы предложить простое решение, которое отвечает на поставленный вопрос в том виде, в котором оно сформулировано. Все, что требуется, это «отразить» список перечисления вектором.
enum class genre { Fiction, NonFiction, Periodical, Biography, Children };
vector<string>genre_tbl { "Fiction", "NonFiction", "Periodical", "Biography", "Children" };
Поскольку перечисленное выше перечисление будет делать следующее по умолчанию;
Fiction = 0
NonFiction = 1
Periodical = 2
Biography = 3
Children = 4
Это соответствует позициям вектора, что делает преобразование enum в строку довольно простым.
string s1 = genre_tbl[int(genre::fiction)];
Для моей задачи я создал пользовательский класс Book с членом Gen типа type genre. Программа должна была иметь возможность печатать жанр как слово.
class book {...};
ostream& operator<<(ostream& os, genre g) { return os << genre_tbl[int(g)]; }
book b1;
b1.Gen = genre(0)
cout << b1.Gen;
В этом случае «Fiction» будет печататься на экране.