您可以使用 typedef 使 Color 枚举类型可访问,而无需指定它的“全名”。
typedef Sample::Colour Colour; Colour c = Colour::BLUE;
这对我来说听起来是正确的,但有人否决了它并留下了这条评论:
在枚举上使用范围解析运算符 ::(如“Colour::BLUE”)是特定于编译器的扩展,而不是标准 C++
真的吗?我相信我在 MSVC 和 GCC 上都使用过它,尽管我不确定。
我尝试了以下代码:
enum test
{
t1, t2, t3
};
void main()
{
test t = test::t1;
}
Visual C++ 9 编译它时出现以下警告:
警告 C4482:使用了非标准扩展:限定名称中使用了枚举“测试”
看起来不是标准的。
在标准 c++ 中,“::”左边的东西必须是类或命名空间,枚举不计算在内。
这在 C++98 中是不允许的。但是,从 C++11 开始,您可以选择将范围解析运算符与“旧式”枚举一起使用
enum E { A };
int main()
{
A; // OK
E::A; // Also OK
}
A
在 C++11 及更高版本中,两种引用方式都是正确的。
您可以做的就是创建一个与枚举同名的命名空间。这将有效地将枚举值添加到它们自己的范围中,您可以使用枚举/命名空间的名称来引用它们。当然,它仅适用于否则将存在于全局(或另一个命名空间)范围内的枚举。
还有一篇关于这个问题的文章。