Enum (C++/CX)
C++/CX mendukung public enum class
kata kunci, yang dianalogikan dengan C++ scoped enum
standar. 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) { /* */ }