Enumeraciones (C++/CX)
C++/CX admite la palabra clave public enum class
, que es análoga a un scoped enum
de C++ estándar. Cuando utilices un enumerador que se declara mediante la palabra clave public enum class
, debes usar el identificador de enumeración para determinar el ámbito de cada valor de enumerador.
Comentarios
Una public enum class
que no tiene un especificador de acceso, como public
, se trata como una enumeración con ámbitode C++ estándar.
Una declaración de public enum class
o de public enum struct
puede tener un tipo subyacente de cualquier tipo entero aunque el propio Windows Runtime requiera que el tipo sea int32, o uint32 para una enumeración de marcas. La sintaxis siguiente describe las partes de o public enum class
public enum struct
.
En este ejemplo se muestra cómo definir una clase de enumeración pública:
// Define the enum
public enum class TrafficLight : int { Red, Yellow, Green };
// ...
En este ejemplo siguiente se muestra cómo usarla:
// Consume the enum:
TrafficLight myLight = TrafficLight::Red;
if (myLight == TrafficLight::Green)
{
//...
}
Ejemplos
En los ejemplos siguientes se muestra cómo declarar una enumeración:
// 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);
En el ejemplo siguiente se muestra cómo convertirla a equivalentes numéricos y realizar comparaciones. Observa que el ámbito del uso del enumerador One
lo determina el identificador de la enumeración Enum1
, y el ámbito del enumerador First
lo determina 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) { /* */ }
Consulte también
Sistema de tipos
Referencia del lenguaje C++/CX
Referencia de espacios de nombres