如何強制所有枚舉擁有自己的名稱空間?刪除C++中枚舉的可見性
我有多個枚舉與具有相同的名稱,並希望他們通過枚舉命名空間訪問成員,
例如
enum X {b, a};
enum Y {a, b};
上面的代碼將無法編譯,因爲一個是要麼X :: a或Y :: a
我該怎麼做才能永遠不能使用,除非客戶端指定X :: A或Y :: A,所以它編譯?
如何強制所有枚舉擁有自己的名稱空間?刪除C++中枚舉的可見性
我有多個枚舉與具有相同的名稱,並希望他們通過枚舉命名空間訪問成員,
例如
enum X {b, a};
enum Y {a, b};
上面的代碼將無法編譯,因爲一個是要麼X :: a或Y :: a
我該怎麼做才能永遠不能使用,除非客戶端指定X :: A或Y :: A,所以它編譯?
enum class X {b, a};
enum class Y {a, b};
這是做你想做的,也禁用一堆隱式轉換爲枚舉類型的整型。
一種解決方案是實際使用真正命名空間是:
#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()
。
在C++ 11及更高版本中使用'enum class'。 – Cornstalks
如果C++ 11使用枚舉類。 – Max
使用枚舉類 – Borgleader