Anteckning
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
C++/CX har stöd för nyckelordet public enum class , vilket motsvarar en standard C++ scoped enum. När du använder en uppräkning som deklareras med nyckelordet public enum class måste du använda uppräkningsidentifieraren för att omfångsbegränsa varje uppräkningsvärde.
Anmärkningar
En public enum class som inte har någon åtkomstspecificerare, till exempel public, behandlas som ett C++- standardomfångsuppräkning.
En public enum class eller public enum struct en deklaration kan ha en underliggande typ av valfri integraltyp, även om Själva Windows Runtime kräver att typen är int32 eller uint32 för en flagguppräkning. Följande syntax beskriver delarna i en public enum class eller public enum struct.
Det här exemplet visar hur du definierar en offentlig uppräkningsklass:
// Define the enum
public enum class TrafficLight : int { Red, Yellow, Green };
// ...
I nästa exempel visas hur du använder det:
// Consume the enum:
TrafficLight myLight = TrafficLight::Red;
if (myLight == TrafficLight::Green)
{
//...
}
Exempel
I nästa exempel visas hur du deklarerar en uppräkning,
// 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);
I nästa exempel visas hur du castar till numeriska motsvarigheter och utför jämförelser. Observera att användningen av uppräknaren One begränsas av Enum1 uppräkningsidentifieraren och att uppräknaren First begränsas av 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) { /* */ }
Se även
typsystem
C++/CX-språkreferens
referens för namnområden