Действительно ли нам нужен «enum class» в C ++ 0x?
Нет, нам не «нужно» enum class
. Мы можем получить достаточно эквивалентную функциональность другими способами. Но по этой логике нам не нужно много вещей в C ++. Нам не «нужны» виртуальные функции и наследование, поскольку мы можем просто реализовать их вручную с помощью vtables и тому подобного. Нам не «нужны» функции-члены; им можно подражать, если они примут дополнительный аргумент.
Существуют языковые функции, облегчающие жизнь программистам. То, что что-то можно сделать вручную, не означает, что это нужно.
enum class
обладает следующими свойствами:
- Это легко понять; он отражает работу перечислений на других языках.
- Это требует относительно немного от авторов компиляторов. Сравните усилия по реализации с такими функциями, как ссылки на r-значения, необычные шаблоны или пользовательские литералы.
- Это никак не нарушает синтаксис. Поначалу может показаться немного странным, что вы видите
enum class
, но это верно для большинства новых функций. Как только вы к этому привыкнете, все в порядке.
- Он на 100% обратно совместим в том смысле, что он не определяет, как работают регулярные перечисления. Перечисления старого стиля работают так же, как и раньше.
- Это избавляет вас от необходимости писать много шаблонного кода. В Boost есть макрос для создания эффекта
enum class
определений. Без этого макроса вам придется потратить немало усилий, чтобы все угловые случаи сработали. И даже в этом случае кто-то должен был написать и отладить этот макрос.
Так нет, нам они не «нужны». Но они все еще являются отличным дополнением к языку.