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不是名称空间,因此它显然不起作用。
这是不可能的:
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
以了解它试图解决的一些问题。范围枚举的全部要点是避免将其成员注入到封闭范围内。
因此,只需使用常规枚举即可。