Enumerazioni (C++/CX)
C++/CX supporta la public enum class
parola chiave , che è analoga a un linguaggio C++ scoped enum
standard. Quando utilizzi un enumeratore dichiarato tramite la parola chiave public enum class
, è necessario che utilizzi l'identificatore di enumerazione per limitare l'ambito di ogni valore dell'enumeratore.
Osservazioni:
Un oggetto public enum class
che non dispone di un identificatore di accesso, ad esempio public
, viene considerata un' enumerazione con ambitoC++ standard.
Una public enum class
dichiarazione o public enum struct
può avere un tipo sottostante di qualsiasi tipo integrale, anche se Windows Runtime stesso richiede che il tipo sia int32 o uint32 per un'enumerazione flag. La sintassi seguente descrive le parti di un public enum class
oggetto o public enum struct
.
Nell'esempio riportato di seguito viene mostrato come definire una classe enum pubblica:
// Define the enum
public enum class TrafficLight : int { Red, Yellow, Green };
// ...
In questo esempio viene mostrato come utilizzarla:
// Consume the enum:
TrafficLight myLight = TrafficLight::Red;
if (myLight == TrafficLight::Green)
{
//...
}
Esempi
Negli esempi successivi viene illustrato come dichiarare un'enumerazione.
// 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);
Nell'esempio riportato di seguito viene illustrato come eseguire il cast agli equivalenti numerici e come eseguire confronti. Nota che l'utilizzo dell'enumeratore One
è limitato di ambito dall'identificatore di enumerazione Enum1
e l'enumeratore First
è limitato di ambito da 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) { /* */ }
Vedi anche
Sistema di tipi
Riferimenti al linguaggio C++/CX
Riferimenti a spazi dei nomi