Partilhar via


Enums (C++/CX)

C++/CX suporta a public enum class palavra-chave, que é análoga a um C++ scoped enumpadrão. Quando você usa um enumerador que é declarado usando a public enum class palavra-chave, você deve usar o identificador de enumeração para definir o escopo de cada valor de enumerador.

Observações

Um public enum class que não tem um especificador de acesso, como public, é tratado como um enum de escopo C++ padrão.

Uma public enum class declaração or public enum struct pode ter um tipo subjacente de qualquer tipo integral, embora o próprio Tempo de Execução do Windows exija que o tipo seja int32 ou uint32 para um flags enum. A sintaxe a seguir descreve as partes de a public enum class ou public enum struct.

Este exemplo mostra como definir uma classe enum pública:

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

Este próximo exemplo mostra como consumi-lo:

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

Exemplos

Os próximos exemplos mostram como declarar um enum,

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

O próximo exemplo mostra como converter para equivalentes numéricos e realizar comparações. Observe que o uso do enumerador One tem como escopo o identificador de enumeração e o Enum1 enumerador First tem como escopo o escopo de 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) { /*   */ } 

Ver também

Sistema de tipo
Referência da linguagem C++/CX
Referência de namespaces