我需要在一个代码块中多次使用枚举类的枚举器,我想避免使用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不是命名空间。
答案 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}},看看它试图解决的一些问题。范围枚举的重点是避免将其成员注入封闭范围。
所以只需使用常规枚举。