Проблема:
Проблема перечислений в том, что они уменьшают читаемость кода. Думать о
Motor.Turn (Full)
,
Что значит Full
имею в виду? Какие были другие варианты (Half
? Empty
? Green
? …)?
Идея:
Я хотел бы реализовать что-то вроде этого:
Motor.Turn (StepMode::Full)
или в другой ситуации:
Color c = Color::Red;
if (c == Color::Red)
/* Do something */
else if (c == Color::Yellow)
/* Do something else */
Это не только повысит удобочитаемость, но и упростит ввод текста, если я знаю название класса (Color
в примере), так как моя IDE, вероятно, сможет перечислить все возможные варианты.
Вопросы:
Color
учебный класс? (Я, вероятно, могу написать код, но я не знаю, как его разработать)Информация:
Я довольно новичок в C ++ и не знаю, как правильно выразить то, что я ищу. Поэтому я не смог найти решение с помощью Google или SO.
И: это мой самый первый вопрос по stackoverflow. \ О /
То, что вы хотите, это строго типизированные перечисления. Они объявлены так:
enum class Color {
Red, Green, Blue, Yellow
};
И использовал вот так:
Color c = Color::Red;
if (c == Color::Red)
/* Do something */
else if (c == Color::Yellow)
/* Do something else */
Обратите внимание, что перечислимые классы являются функциями C ++ 11, которые, возможно, потребуется включить в вашем компиляторе, передав -std=c++11
вариант.