Я часто прибегаю к эзотерическому использованию при определении перечислений в C ++, особенно когда есть несколько типов в определенном контексте. Это позволяет использовать, например, Quality::k_high
и Importance::k_high
в связанных контекстах. Перечисления также часто содержат неизвестные значения (обычно для представления случаев, когда ни одно из них не было установлено), которые необходимо квалифицировать для устранения неоднозначности констант (скажем, k_qualityNone
и k_importanceNone
), которых избегают с использованием пространств имен.
Определение будет выглядеть следующим образом:
namespace Quality {
enum Type { k_high, k_medium, k_low, k_none };
}
и
namespace Importance {
enum Type { k_high, k_medium, k_low, k_none };
}
Функции и методы примут аргумент типа Quality::Type
(и Importance::Type
), который достаточно описательный и приятный. Индивидуальные константы перечисления также квалифицируются так же, как упоминалось ранее (Quality::k_low
).