2017-06-21 75 views
1

如何強制所有枚舉擁有自己的名稱空間?刪除C++中枚舉的可見性

我有多個枚舉與具有相同的名稱,並希望他們通過枚舉命名空間訪問成員,

例如

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

上面的代碼將無法編譯,因爲一個是要麼X :: a或Y :: a

我該怎麼做才能永遠不能使用,除非客戶端指定X :: A或Y :: A,所以它編譯?

+4

在C++ 11及更高版本中使用'enum class'。 – Cornstalks

+1

如果C++ 11使用枚舉類。 – Max

+2

使用枚舉類 – Borgleader

回答

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

這是做你想做的,也禁用一堆隱式轉換爲枚舉類型的整型。

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()