Énumérations (C++/CX)
C++/CX prend en charge le public enum class
mot clé, qui est analogue à un C++ scoped enum
standard. 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