Уайетт Андерсон уже предложил
namespace A
{
enum A {joe, bob, doc};
}
namespace B
{
enum B {sunday, monday, doc};
}
в качестве исправления для проблемы «значения перечисления находятся в той же области, что и само перечисление», что позволяет вам написать
A::doc;
B::doc;
Но это решение недоступно, когда вы хотите enum
локально для класса, по крайней мере, без введения искусственного пространства имен вне класса.
Простое решение состоит в том, чтобы вместо этого обернуть каждый enum
в структуруПримерно так:
struct A
{
enum Enum {joe, bob, doc};
};
struct B
{
enum Enum {sunday, monday, doc};
};
Это позволяет использовать ту же нотацию использования, что и для решения пространства имен,
A::doc;
B::doc;
, но дополнительно разрешает
определение внутри класса,
перенос имен перечисления непосредственно в класс посредством наследования и
локальное переименование класса в классификаторечерез typedef
.
Кроме того, соглашение о присвоении имен , приведенное в качестве примера выше, позволяет
- , на мой взгляд, немного дополнительной ясностиссылаясь на тип enum, например:
A::Enum
.
OK,соглашение об именах может также использоваться с решением на основе пространства имен…
Cheers & hth.,