我需要在一段代碼中多次使用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;
但它顯然沒有奏效,因爲顏色是不是一個命名空間。
我需要在一段代碼中多次使用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;
但它顯然沒有奏效,因爲顏色是不是一個命名空間。
這是不可能的:
7.3.3p7
的using
聲明[namespace.udecl]
(n3337)甲using聲明不得命名作用域枚舉器。
您可以使用decltype
一個類型別名:
using RED = decltype(red);
它確實在鐺工作,但它是一個reported bug。
解決方法是使用變量。
Color red = Color::RED;
重讀的問題,這聽起來像你想使枚舉的變量所有爲範圍,而不僅僅是一個成員。我建議你閱讀proposal的enum class
,看看它試圖解決的一些問題。範圍枚舉的全部意義在於避免將其成員注入封閉範圍。
所以只需使用一個普通的枚舉。
那有點麻煩。此外,我不能在我想要的switch語句中使用它。 – Slazer
我無法在此代碼中使用該變量。 http://pastebin.com/Hi9ztVe8 – Slazer
@Slazer你可以製作'red' constexpr。 – user5378483
試着看看這個。 http://stackoverflow.com/questions/2503807/declaring-an-enum-within-a-class – Invictus
雖然Q不回答我的問題。 – Slazer