我需要在一段代码中多次使用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