2015-09-26 67 views
0

我需要在一段代碼中多次使用enum類的枚舉器,我想避免C++ 03的經典枚舉。如何使用沒有範圍的枚舉類

enum class Color {RED, GREEN}; 
{ 
    Color::RED //this works 
    RED;  //how do I make this work (only for this block)? 
} 

我嘗試使用

using namespace Color; 

但它顯然沒有奏效,因爲顏色是不是一個命名空間。

+0

試着看看這個。 http://stackoverflow.com/questions/2503807/declaring-an-enum-within-a-class – Invictus

+0

雖然Q不回答我的問題。 – Slazer

回答

4

這是不可能的:

7.3.3p7using聲明[namespace.udecl]n3337

using聲明不得命名作用域枚舉器。

您可以使用decltype一個類型別名:

using RED = decltype(red); 

確實在鐺工作,但它是一個reported bug

解決方法是使用變量。

Color red = Color::RED; 

重讀的問題,這聽起來像你想使枚舉的變量所有爲範圍,而不僅僅是一個成員。我建議你閱讀proposalenum class,看看它試圖解決的一些問題。範圍枚舉的全部意義在於避免將其成員注入封閉範圍。

所以只需使用一個普通的枚舉。

+0

那有點麻煩。此外,我不能在我想要的switch語句中使用它。 – Slazer

+0

我無法在此代碼中使用該變量。 http://pastebin.com/Hi9ztVe8 – Slazer

+0

@Slazer你可以製作'red' constexpr。 – user5378483