2017-06-21 16 views
1

すべての列挙型にそれぞれ独自の名前空間を持たせるにはどうすればよいですか?C++の列挙型を削除する

私があるので、上記のコードはコンパイルされません

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

例えば同じ名前を持つメンバーと複数の列挙型があり、それらを列挙名前空間を介してアクセスすることにしたい、

X :: aまたはY :: aのいずれか

クライアントがX :: AまたはY :: Aを指定してコンパイルするまで、aを使用できないようにするにはどうすればよいですか?

+4

C++ 11以降の 'enum class'です。 – Cornstalks

+1

C++ 11がenumクラスを使用する場合。 – 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; 
} 

あなたはそれぞれのラインに3つの可能性の高い操作(変数の設定/タイプを使用して、値を直接使用して、宣言を)見ることができますmain()