Share via


Výčty (C++/CX)

C++/CX podporuje public enum class klíčové slovo, které je podobné standardnímu jazyku C++ scoped enum. Při použití enumerátoru, který je deklarován pomocí klíčového public enum class slova, je nutné použít identifikátor výčtu k určení rozsahu každé hodnoty výčtu.

Poznámky

Specifikátor public enum class přístupu, jako publicje například , se považuje za standardní výčt c++ s oborem.

A public enum class nebo public enum struct deklarace může mít základní typ jakéhokoli celočíselného typu, i když prostředí Windows Runtime sám vyžaduje, aby typ byl int32 nebo uint32 pro výčty příznaků. Následující syntaxe popisuje části nebo public enum classpublic enum struct.

Tento příklad ukazuje, jak definovat veřejnou třídu výčtu:

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

Tento další příklad ukazuje, jak ho používat:

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

Příklady

Další příklady ukazují, jak deklarovat výčt,

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

Další příklad ukazuje, jak přetypovat na číselné ekvivalenty a provádět porovnání. Všimněte si, že použití enumerátoru One je vymezeno identifikátorem Enum1 výčtu a enumerátor First je vymezen .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) { /*   */ } 

Viz také

Systém typů
Referenční zdroje k jazyku C++/CX
Referenční informace o oborech názvů