Compartir a través de


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