Udostępnij za pośrednictwem


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