Freigeben über


Enumerationen (C++/CX)

C++/CX unterstützt das public enum class Schlüsselwort, das analog zu einem C++ scoped enum-Standard ist. Wenn Sie einen Enumerator verwenden, der durch das Schlüsselwort public enum class deklariert ist, müssen Sie den Enumerationsbezeichner dazu benutzen, den Umfang jedes Enumeratorwerts festzulegen.

Hinweise

Eine public enum class , die keinen Zugriffsspezifizierer hat, z. B. public, wird als standardmäßige Enumeration mit C++-Bereichseinschränkungbehandelt.

Eine public enum class oder public enum struct Deklaration kann einen zugrunde liegenden Typ eines beliebigen integralen Typs aufweisen, obwohl die Windows-Runtime selbst erfordert, dass der Typ int32 oder uint32 für eine Flags-Enumeration ist. Die folgende Syntax beschreibt die Teile eines oder public enum structmehrerer public enum class .

Dieses Beispiel zeigt, wie eine öffentliche Enumerationsklasse definiert wird:

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

In diesem folgenden Beispiel wird zeigt, wie sie verwendet wird:

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

Beispiele

In den folgenden Beispielen wird veranschaulicht, wie eine Enumeration deklariert wird.

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

Im nächsten Beispiel wird gezeigt, wie Sie eine Enumeration in numerische Werte umwandeln und Vergleiche durchführen. Beachten Sie, dass die Verwendung des Enumerators One vom Enumerationsbezeichner Enum1 beschränkt wird, und der Enumerator First wird durch Enum2beschränkt.

 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) { /*   */ } 

Siehe auch

Typsystem
C++-/CX-Programmiersprachenreferenz
Referenz zu Namespaces