删除C ++中的枚举可见性

时间:2017-06-21 02:25:31

标签: c++

如何强制所有枚举拥有自己的命名空间?

我有多个枚举,其成员具有相同的名称,并希望通过枚举命名空间访问它们,

例如

enum X {b, a};
enum Y {a, b};

上面的代码不会编译,因为a是X :: a或Y :: a

除非客户端指定X :: A或Y :: A,否则我怎么能这样做才能使用它?所以它编译?

2 个答案:

答案 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};

这可以满足您的需求,并且还可以禁用一系列隐式转换为枚举的整数类型。