如何强制所有枚举拥有自己的命名空间?
我有多个枚举,其成员具有相同的名称,并希望通过枚举命名空间访问它们,
例如
enum X {b, a};
enum Y {a, b};
上面的代码不会编译,因为a是X :: a或Y :: a
除非客户端指定X :: A或Y :: A,否则我怎么能这样做才能使用它?所以它编译?
答案 0 :(得分:2)
一种解决方案是实际使用真正的命名空间:
#include <iostream>
namespace X { enum X {b = 1, a = 2}; }
namespace Y { enum Y {a = 3, b = 4}; }
int main (void) {
std::cout << X::a << std::endl; // use value.
std::cout << sizeof(Y::Y) << std::endl; // use type.
Y::Y yy = Y::b; // set variable.
return 0;
}
您可以在main()
的相应行中看到三种可能的操作(直接使用值,使用类型和声明/设置变量)。
答案 1 :(得分:2)
enum class X {b, a};
enum class Y {a, b};
这可以满足您的需求,并且还可以禁用一系列隐式转换为枚举的整数类型。