列舉 (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 struct 的部分 public enum class

本範例示範如何定義公用列舉類別:

// 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);

下一個範例示範如何轉型為數值對應項及執行比較。 請注意,列舉程式 OneEnum1 列舉識別項界定使用範圍,列舉程式 FirstEnum2界定範圍。

 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 語言參考
命名空間參考