Параметр и результат enum class в C++
Тип enum class подходит для параметра
и для типа результата так же, как int или
имя класса: функция получает один из заранее известных
вариантов и может вернуть другую константу того же типа.
В теле функции значение сравнивают или разбирают
через switch. Запишем функцию, которая по
цвету возвращает короткую метку, и выведем ответ
для Color::green:
#include <iostream>
#include <string>
enum class Color { red, green, blue };
std::string name(Color c) {
switch (c) {
case Color::red:
return "red";
case Color::green:
return "green";
case Color::blue:
return "blue";
}
return "";
}
int main() {
std::cout << name(Color::green) << "\n";
return 0;
}
Функция может возвращать саму константу перечисления.
Запишем выбор режима по флагу и выведем метку
через switch:
#include <iostream>
enum class Mode { view, edit };
Mode pick(bool canEdit) {
if (canEdit) {
return Mode::edit;
}
return Mode::view;
}
int main() {
Mode mode = pick(true);
switch (mode) {
case Mode::view:
std::cout << "view\n";
break;
case Mode::edit:
std::cout << "edit\n";
break;
}
return 0;
}
Объявите enum class Shape с константами
circle, square и triangle.
Напишите функцию с параметром Shape,
которая возвращает короткое имя фигуры в виде
строки. Вызовите ее с Shape::triangle
и выведите результат.
Объявите enum class Size с константами
s, m и l.
Напишите функцию, которая принимает bool
и возвращает Size::l, если аргумент
true, иначе Size::s.
Выведите метку для результата вызова с false.