C++ 如何使用没有作用域的枚举类

C++ 如何使用没有作用域的枚举类,c++,class,c++11,enums,C++,Class,C++11,Enums,我需要在一段代码中多次使用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使用声明的[namespace.

我需要在一段代码中多次使用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
使用
声明的
[namespace.udecl]
()

using声明不应命名作用域枚举器

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

using RED = decltype(red);
它确实在叮当作响中工作,但它是一个声音

解决方法是使用变量

Color red = Color::RED;

重读这个问题,听起来您希望将枚举的所有变量引入范围,而不仅仅是一个成员。我建议您阅读for
enum类
,了解它试图解决的一些问题。作用域枚举的全部要点是避免将其成员注入封闭作用域


所以只需使用常规枚举

试试看这个。这个问题并没有回答我的问题。这有点麻烦。此外,我不能像我想的那样在switch语句中使用它。@Slazer您可以使
red
constexpr。我不能使用常规枚举,因为我有两个枚举,它们都有一个同名的枚举数。我在一个函数中使用一个枚举,在另一个函数中使用另一个枚举。我想使用它是因为类型安全(提案中的2.1)。我不希望任何“color++”或“color=3”继续运行。@Slazer
color++
color=3
在常规枚举上也不起作用。我知道,但可以用-fppermission覆盖它,哪一个可以。在C++11中,它是一个显示停止器。这只是一个原因。正如我所说,使用enum无论如何都不能解决这个问题。