列挙型 (C++/CX)

C++/CX は、標準 C++ scoped enum に似ている public enum class キーワードをサポートしています。 public enum class キーワードを使用して宣言された列挙子を使用する場合、列挙体識別子を使用して各列挙子値の範囲を指定する必要があります。

解説

public enum class など、アクセス指定子を持たない publicは、標準 C++ の スコープ列挙体として扱われます。

public enum class または public enum struct 宣言の型は、任意の整数型の基となる型 (Windows ランタイム自体が int32 型を要求している場合でも)、またはフラグ列挙用の uint32 にすることができます。 次の構文では、a または 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);

次の例は、同等の数値にキャストし、比較を実行する方法を示しています。 列挙子 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 言語リファレンス
名前空間参照