如何在没有范围的情况下使用枚举类

Sla*_*zer 2 c++ enums class c++11

我需要在一个代码块中多次使用enum类的枚举器,并且我想避免使用C ++ 03中的经典枚举。

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

我尝试使用

using namespace Color;
Run Code Online (Sandbox Code Playgroud)

但由于Color不是名称空间,因此它显然不起作用。

use*_*483 5

这是不可能的:

7.3.3p7 using声明 [namespace.udecl]n3337

一个using声明不得命名范围的枚举。

您可以使用decltype以下方式创建类型别名:

using RED = decltype(red);
Run Code Online (Sandbox Code Playgroud)

确实可以在Clang 工作,但是是一个已报告的bug

解决方法是使用变量。

Color red = Color::RED;
Run Code Online (Sandbox Code Playgroud)

重新阅读该问题,听起来您想将所有枚举的变量都带入范围,而不仅仅是一个成员。我建议您阅读该提案enum class以了解它试图解决的一些问题。范围枚举的全部要点是避免将其成员注入到封闭范围内。

因此,只需使用常规枚举即可。