列挙型 (C++/CX)Enums (C++/CX)

C++/CX では、標準C++ scoped enumに似た public enum class キーワードがサポートされています。C++/CX supports the public enum class keyword, which is analogous to a standard C++ scoped enum. public enum class キーワードを使用して宣言された列挙子を使用する場合、列挙体識別子を使用して各列挙子値の範囲を指定する必要があります。When you use an enumerator that's declared by using the public enum class keyword, you must use the enumeration identifier to scope each enumerator value.

RemarksRemarks

public enum class など、アクセス指定子を持たない publicは、標準 C++ の スコープ列挙体として扱われます。A public enum class that doesn't have an access specifier, such as public, is treated as a standard C++ scoped enum.

public enum class または public enum struct の宣言は、任意の整数型の基になる型を持つことができますが、Windows ランタイム自体では、型を int32 にする必要があります。また、フラグの列挙体に対して uint32 を使用することもできます。A public enum class or public enum struct declaration can have an underlying type of any integral type although the Windows Runtime itself requires that the type be int32, or uint32 for a flags enum. 次の構文は、 public enum class または public enum structの各部分を説明します。The following syntax describes the parts of an public enum class or public enum struct.

この例は、パブリック列挙型クラスを定義する方法を示しています。This example shows how to define a public enum class:

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

この次の例では、それを利用する方法を示しています。This next example shows how to consume it:

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

使用例Examples

次の例は、列挙型を宣言する方法を示します。The next examples show how to declare an enum,

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

次の例は、同等の数値にキャストし、比較を実行する方法を示しています。The next example shows how to cast to numeric equivalents, and perform comparisons. 列挙子 One の使用範囲は Enum1 列挙体識別子により指定され、列挙子 First の範囲は Enum2によって指定されることに注意してください。Notice that the use of enumerator One is scoped by the Enum1 enumeration identifier, and enumerator First is scoped by 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) { /*   */ } 

関連項目See also

型システムType System
C++/CX 言語リファレンスC++/CX Language Reference
名前空間参照Namespaces Reference