2015-09-26 68 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