Предпочтительный метод использования перечислений в C ++ - определить их внутри класса:
class Foo {
public:
enum Bar {
ENUM_VALUE1,
ENUM_VALUE2
};
};
Затем вы можете ссылаться на них, используя:
Foo::Bar var;
var = Foo::ENUM_VALUE1;
Внутри класса вы можете удалить префикс Foo::
.
Как вы, вероятно, заметили, хотя тип перечисления Foo::Bar
, на значения не ссылаются через Foo::Bar::ENUM_VALUE1
, а скорее появляются в пространстве имен Foo
. Это может быть проблематично, если разные перечисления имеют одинаковые имена значений. Чтобы избежать этого, вы можете сделать следующий трюк:
class Foo {
public:
struct Bar {
enum ENUM {
ENUM_VALUE1,
ENUM_VALUE2
};
struct Baz {
enum ENUM {
ENUM_VALUE1,
ENUM_VALUE2
};
};
};
Foo::Bar::ENUM e = Foo::Bar::ENUM_VALUE1;
Foo::Baz::ENUM e2 = Foo::Baz::ENUM_VALUE1;