枚举 (C++/CX)

C++/CX 支持 public enum class 关键字,该关键字类似于标准 C++ scoped enum。 当你使用通过 public enum class 关键字声明的枚举数时,必须使用枚举标识符确定每个枚举值的范围。

备注

没有访问说明符(如 public enum class )的 public将作为标准 C++ 范围枚举处理。

public enum classpublic enum struct 声明可以有任何整数类型的基础类型,尽管 Windows 运行时本身要求类型是 int32 或者 uint32(对于标志枚举)。 以下语法描述 public enum classpublic enum struct 的一部分。

此示例演示如何定义公共枚举类:

// Define the enum
public enum class TrafficLight : int { Red, Yellow, Green }; 
// ...

下一个示例演示如何使用枚举类:

// Consume the enum:
TrafficLight myLight = TrafficLight::Red;
if (myLight == TrafficLight::Green) 
{
    //...
} 

示例

后续示例演示如何声明枚举。

// Underlying type is int32
public enum class Enum1
{
    Zero,
    One,
    Two,
    Three
};

public enum class Enum2
{
    None = 0,
    First,      // First == 1
    Some = 5,
    Many = 10
};

// Underlying type is unsigned int
// for Flags. Must be explicitly specified
using namespace Platform::Metadata;
[Flags]
public enum class BitField : unsigned int 
{
    Mask0 = 0x0,
    Mask2 = 0x2,
    Mask4 = 0x4,
    Mask8 = 0x8
};

Enum1 e1 = Enum1::One;
int v1 = static_cast<int>(e1);
int v2 = static_cast<int>(Enum2::First);

下一个示例演示如何强制转换为数字等效值和执行比较。 请注意,枚举数 One 的使用通过 Enum1 枚举标识符来确定范围,枚举数 First 通过 Enum2来确定范围。

 if (e1 == Enum1::One) { /* ... */ }
 //if (e1 == Enum2::First) { /* ... */ } // yields compile error C3063

 static_assert(sizeof(Enum1) == 4, "sizeof(Enum1) should be 4");

 BitField x = BitField::Mask0 | BitField::Mask2 | BitField::Mask4;
 if ((x & BitField::Mask2) == BitField::Mask2) { /*   */ } 

另请参阅

类型系统
C++/CX 语言参考
命名空间参考