Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
O C++/CX dá suporte à palavra-chave public enum class, que é análoga a um C++ scoped enum padrão. Quando você usa um enumerador que é declarado usando a palavra-chave public enum class , deve usar o identificador da enumeração para definir o escopo de cada valor de enumeração.
Comentários
Uma public enum class que não tem um especificador de acesso, como public, é tratada como um enum com escopoC++ padrão.
Uma declaração de public enum class ou de public enum struct pode ter um tipo subjacente de qualquer tipo integral, embora o Windows Runtime em si exija que o tipo seja int32 ou uint32 para uma enumeração de sinalizadores. A sintaxe a seguir descreve as partes de um 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 exemplo a seguir mostra como consumi-la:
// Consume the enum:
TrafficLight myLight = TrafficLight::Red;
if (myLight == TrafficLight::Green)
{
//...
}
Exemplos
Os exemplos a seguir mostram como declarar uma 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 com converter em equivalentes numéricos e executar comparações. Observe que o uso do enumerador One tem seu escopo definido pelo identificador de enumeração Enum1 e o enumerador First tem seu escopo definido por 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) { /* */ }
Confira também
Sistema de tipos
Referência da linguagem C++/CX
Referência de namespaces