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

How to use enum class without a scope

本文关键字:枚举 作用域 何使用      更新时间:2023-10-16

我需要在一个代码块中多次使用枚举类的枚举数,并且我想避免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。