Полезны ли еще перечисления без области действия?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
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

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