Перечисления (C++/CX)

C++/CX поддерживает public enum class ключевое слово, аналогичный стандартному C++ scoped enum. При использовании перечислителя, объявленного с помощью ключевого слова public enum class , необходимо использовать идентификатор перечисления, чтобы определить область каждого значения перечислителя.

Замечания

Объявление public enum class , не содержащее спецификатор доступа, например public, обрабатывается как стандартное перечисление С++ с областью видимости.

public enum struct Или public enum class объявление может иметь базовый тип любого целочисленного типа, хотя сам среда выполнения Windows требует, чтобы тип был int32 или uint32 для перечисления флагов. Следующий синтаксис описывает части или public enum classpublic enum struct.

В этом примере показано, как определить открытый класс перечисления:

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

В следующем примере показано, как использовать его:

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

Примеры

В следующих примерах показано, как объявить перечисление.

// 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);

В следующем примере показано, как выполнять приведение к числовым эквивалентами и выполнять сравнения. Обратите внимание, что область использования перечислителя One определяется идентификатором перечисления Enum1 , а область использования перечислителя First — идентификатором 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) { /*   */ } 

См. также

Система типов
Справочник по языку C++/CX
Справочник по пространствам имен