Wyliczenia (C++/CX)
Język C++/CX obsługuje public enum class
słowo kluczowe, które jest analogiczne do standardowego języka C++ scoped enum
. W przypadku używania modułu wyliczającego zadeklarowanego przy użyciu słowa kluczowego public enum class
należy użyć identyfikatora wyliczenia, aby ograniczyć zakres każdej wartości modułu wyliczającego.
Uwagi
Elementpublic enum class
, który nie ma specyfikatora dostępu, takiego jak public
, jest traktowany jako standardowe wyliczenie w zakresie języka C++.
Deklaracja public enum class
lub public enum struct
może mieć podstawowy typ dowolnego typu całkowitego, chociaż sam środowisko wykonawcze systemu Windows wymaga, aby typ był int32 lub uint32 dla wyliczenia flag. Poniższa składnia opisuje części obiektu public enum class
lub public enum struct
.
W tym przykładzie pokazano, jak zdefiniować publiczną klasę wyliczenia:
// Define the enum
public enum class TrafficLight : int { Red, Yellow, Green };
// ...
W następnym przykładzie pokazano, jak z niego korzystać:
// Consume the enum:
TrafficLight myLight = TrafficLight::Red;
if (myLight == TrafficLight::Green)
{
//...
}
Przykłady
W następnych przykładach pokazano, jak zadeklarować wyliczenie,
// 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);
W następnym przykładzie pokazano, jak rzutować na odpowiedniki liczbowe i wykonywać porównania. Zwróć uwagę, że użycie modułu wyliczającego One
jest ograniczone przez Enum1
identyfikator wyliczania, a moduł First
wyliczający ma zakres .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) { /* */ }
Zobacz też
System typów
Dokumentacja języka C++/CX
Dokumentacja przestrzeni nazw