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 struct
mehrerer 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 Enum2
beschrä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