Bagikan melalui


Enum (C++/CX)

C++/CX mendukung public enum class kata kunci, yang dianalogikan dengan C++ scoped enumstandar. Saat Anda menggunakan enumerator yang dideklarasikan dengan menggunakan public enum class kata kunci, Anda harus menggunakan pengidentifikasi enumerasi untuk mencakup setiap nilai enumerator.

Keterangan

public enum class yang tidak memiliki penentu akses, seperti public, diperlakukan sebagai enum cakupan C++ standar.

public enum class Deklarasi atau public enum struct dapat memiliki jenis yang mendasari jenis integral apa pun meskipun Windows Runtime itu sendiri mengharuskan jenis menjadi int32, atau uint32 untuk enum bendera. Sintaks berikut menjelaskan bagian dari public enum class atau public enum struct.

Contoh ini menunjukkan cara menentukan kelas enum publik:

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

Contoh berikutnya ini menunjukkan cara menggunakannya:

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

Contoh

Contoh berikutnya menunjukkan cara mendeklarasikan 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);

Contoh berikutnya menunjukkan cara mentransmisikan ke setara numerik, dan melakukan perbandingan. Perhatikan bahwa penggunaan enumerator One dilingkup oleh Enum1 pengidentifikasi enumerasi, dan enumerator First dilingkup oleh 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) { /*   */ } 

Lihat juga

Sistem Jenis
Referensi Bahasa C++/CX
Referensi Namespace