如何使用没有作用域的枚举类
How to use enum class without a scope
我需要在一个代码块中多次使用枚举类的枚举数,并且我想避免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
using
声明[namespace.udecl]
(n3337)using-declaration的不能命名作用域枚举数。
您可以使用decltype
创建类型别名:
using RED = decltype(red);
在Clang中可以工作,但这是一个报告错误。
解决方法是使用变量。
Color red = Color::RED;
重读这个问题,听起来你想把枚举的所有变量纳入作用域,而不仅仅是一个成员。我建议你阅读enum class
的提案,看看它试图解决的一些问题。作用域枚举的全部意义在于避免将其成员注入封闭作用域。
所以只使用常规enum。
相关文章:
- 将作用域枚举转换为基础类型
- 表达式必须具有完整或无作用域的枚举图
- 无法让"std::enable_if"适用于无作用域枚举
- 为什么不能直接引用作用域枚举类成员,而不能为无作用域枚举生成类成员?
- 错误:表达式必须具有算术、无作用域枚举或带有运算符重载的指针类型
- 作用域枚举和标准::get
- 如何确保 Visual C++ 不允许作用域枚举访问?
- 枚举位域和聚合初始化
- C++/错误:表达式必须具有整数或无作用域枚举类型
- C++ 在方程中使用变量;错误:表达式必须具有整数或无作用域枚举类型及其他
- 防止作用域枚举可复制/可移动
- 错误:以增量方式填充向量时,表达式必须具有整数或无作用域枚举类型
- 无作用域枚举的基础类型?
- 有效的双向作用域枚举映射
- 错误:数组大小表达式必须具有整型或无作用域枚举类型,而不是'double'
- 在C++14中,在哪个作用域中声明了重新声明枚举的非范围枚举器
- 为什么作用域枚举默认支持运算符'<'?
- 无作用域枚举、枚举器和基础类型C++中的歧义
- 为什么要编译无作用域枚举的声明?
- C++异常处理和枚举作用域