如何使用没有范围的枚举类

时间:2015-09-26 07:33:53

标签: c++ class c++11 enums

我需要在一个代码块中多次使用枚举类的枚举器,我想避免使用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;

但它显然不起作用,因为Color不是命名空间。

1 个答案:

答案 0 :(得分:5)

这是不可能的:

  

7.3.3p7 using声明 [namespace.udecl]n3337

     
    

using-declaration 不得命名范围的枚举器。

  

您可以使用decltype

创建类型别名
using RED = decltype(red);

在Clang中工作,但是reported bug

解决方法是使用变量。

Color red = Color::RED;

重读这个问题,听起来你想把枚举变量的所有带入范围,而不仅仅是一个成员。我建议你阅读enum class的{​​{3}},看看它试图解决的一些问题。范围枚举的重点是避免将其成员注入封闭范围。

所以只需使用常规枚举。