Numaralandırmalar (C++/CX)
C++/CX, standart C++ scoped enum
ile benzer olan anahtar sözcüğünü desteklerpublic enum class
. anahtar sözcüğü kullanılarak public enum class
bildirilen bir numaralandırıcı kullandığınızda, numaralandırma tanımlayıcısını kullanarak her numaralandırıcı değerinin kapsamını belirlemeniz gerekir.
Açıklamalar
public enum class
gibi public
bir erişim tanımlayıcısı olmayan bir, standart C++ kapsamlı sabit listesi olarak değerlendirilir.
Windows Çalışma Zamanı public enum class
türün int32 veya bayraklar sabit listesi için uint32 olmasını gerektirse de, bir veya public enum struct
bildirimi herhangi bir tamsayı türüne sahip olabilir. Aşağıdaki söz diziminde veya public enum class
public enum struct
'nin bölümleri açıklanmaktadır.
Bu örnekte genel sabit listesi sınıfının nasıl tanımlanacağı gösterilmektedir:
// Define the enum
public enum class TrafficLight : int { Red, Yellow, Green };
// ...
Bu sonraki örnekte nasıl kullanılacak gösterilmektedir:
// Consume the enum:
TrafficLight myLight = TrafficLight::Red;
if (myLight == TrafficLight::Green)
{
//...
}
Örnekler
Sonraki örneklerde bir sabit listesi bildirme gösterilmektedir.
// 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);
Sonraki örnekte sayısal eşdeğerlere dönüştürme ve karşılaştırma gerçekleştirme işlemleri gösterilmektedir. Numaralandırıcı One
kullanımının kapsamının numaralandırma tanımlayıcısı, numaralandırıcının Enum1
First
kapsamının ise ile Enum2
belirlenmiş olduğuna dikkat edin.
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) { /* */ }