Полезны ли еще перечисления без области действия?C++

Программы на C++. Форум разработчиков
Anonymous
Полезны ли еще перечисления без области действия?

Сообщение Anonymous »

Я не нашел в стандарте C++11 формулировки, в которой говорилось бы, что перечисления без области действия устарели, но с прагматической точки зрения мне интересно, полезны ли они по-прежнему. Многие люди в моей команде привыкли преобразовывать перечисления с незаданной областью в перечисления с ограниченной областью, но это вызывает некоторую головную боль:

Код: Выделить всё

class foo
{
public:
enum MyEnum { One, Two, Three };
};
Они преобразуют это в:

Код: Выделить всё

class foo
{
public:
enum class MyEnum { One, Two, Three };
};
Это означает, что когда используются эти перечислители, вместо foo::One они выглядят как foo::MyEnum::One. Я задал следующие рекомендации:
  • Если вы преобразуете перечисление в ограниченную область, переместите его из классов в глобальную область видимости или область пространства имен (чтобы улучшить удобство использования и избежать последнего примера использования, приведенного выше).
  • Если вы оставляете перечисление незаданным, убедитесь, что оно находится в области пространства имен/класса/функции/и т. д., чтобы оно не не конфликтуют с другими именами.
Основное различие между этими двумя точками заключается в том, что для #1 мы не помещаем их в классы, что в противном случае добавляет некоторую многословную косвенность.

Все это кажется чрезмерным усложнением, и кажется, что было бы намного проще просто хранить перечисления, уже находящиеся в классах, как перечисления без области видимости. Каков общий передовой подход к выбору между ними?

Подробнее здесь: https://stackoverflow.com/questions/273 ... ill-useful

Вернуться в «C++»