Partager via


Énumérations (C++/CX)

C++/CX prend en charge le public enum class mot clé, qui est analogue à un C++ scoped enumstandard. Lorsque vous utilisez un énumérateur qui est déclaré à l'aide du mot clé public enum class , vous devez utiliser l'identificateur d'énumération pour limiter chaque valeur de l'énumérateur.

Notes

Un public enum class qui n'a pas de spécificateur d'accès, tel que public, est traité comme un scoped enumC++ standard.

Une public enum class ou public enum struct une déclaration peut avoir un type sous-jacent de n’importe quel type intégral, bien que Windows Runtime lui-même exige que le type soit int32, ou uint32 pour une énumération d’indicateurs. La syntaxe suivante décrit les parties d’un public enum class ou public enum struct.

Cet exemple montre comment définir une classe d'énumération publique :

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

L'exemple suivant montre comment le consommer :

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

Exemples

Les exemples suivants indiquent comment déclarer un 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);

L'exemple suivant indique comment effectuer un cast en équivalents numériques et effectuer des comparaisons. Notez que l'utilisation de l'énumérateur One est limitée par l'identificateur d'énumération Enum1 et que l'énumérateur First est limité par 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) { /*   */ } 

Voir aussi

Système de type
Informations de référence sur le langage C++/CX
Référence aux espaces de noms