Enum class (Scoped enumerations, C++11)
Enumμ μΌλ ¨μ κ°μ μ΄λ¦μ λΆμ¬ μλ―Έλ₯Ό λΆμ¬ν©λλ€.
C κ·Έλ¦¬κ³ C++μμ μ ν΅μ μΌλ‘ enumμ unscopedμ΄λ©°, Enum μ체μ μ΄λ¦ μμ΄, μ μΈλ κ°λ€μ λν μ΄λ¦μ λ°λ‘ μ¬μ©νλ κ²μ΄ μΌλ°μ μ λλ€. μλμ μμ μ½λ μ€ enum Sideμ κ²½μ°, Left, Rightμ κ°μ μ΄λ¦μ μμλ‘μ¨ μ¬μ©ν μ μμ΅λλ€.
#include <iostream>
enum Side
{
Left,
Right = 3,
};
enum class CardinalPoints : unsigned char
{
North,
South = 4,
East,
West,
};
int main(int argc, char** argv)
{
// Enum
{
Side side1 = Side::Left;
Side side2 = Left;
int sideInteger = Side::Left;
Side side3(Side::Left);
Side side4(Left);
Side side5 = Side(10);
std::cout << side5 << std::endl;
switch(side1)
{
case 0 : // == Side::Left
{
std::cout << "Left" << std::endl;
break;
}
}
}
// Enum class (or struct)
{
CardinalPoints point1 = CardinalPoints::North;
// CardinalPoints point2 = North; // undeclared identifier.
// int pointInteger = CardinalPoints::North; // can not initialize.
CardinalPoints point3(CardinalPoints::North);
// CardinalPoints point4(North); // undeclared identifier.
CardinalPoints point5 = CardinalPoints(10);
// std::cout << point5 << std::endl; // invalid operand
switch(point1)
{
case CardinalPoints::North :
{
std::cout << "North" << std::endl;
break;
}
}
int pointIntegerWithCast = static_cast<int>(point1);
std::cout << pointIntegerWithCast << std::endl;
}
return 0;
}
10
Left
North
0
C++11 λΆν° μ¬μ© ν μ μλ enum class (or struct)λ scopedμ λλ€. enum classλ‘ μ μΈλ μμλ€μ μ¬μ©νλ €λ©΄ enum classμ μ΄λ¦μ΄ λ°λμ νμν©λλ€. μ¦, North λ‘λ μ¬μ©ν μ μμΌλ©° λ°λμ CardinalPoints::North λ‘ λͺ μλμ΄μΌ ν©λλ€.
λν enumμ μ μν νμ κ³Όμ λ³νμ΄ λΉκ΅μ μμ λ‘μ μ§λ§, enum classλ λ³νμ μ μ½μ΄ μμ΅λλ€. μ§μ μ μΌλ‘ λ€λ₯Έ μ μνμ λμ νκ±°λ ν μ μμΌλ©°, λ°λμ cast κ³Όμ μ κ±°μ³μΌ ν©λλ€.
μμ κ°μ΄, enum classλ enum λ³΄λ€ μ»΄νμΌ νμμ μ격νκ² μ‘°κ±΄μ 체ν¬νκΈ° λλ¬Έμ νλ‘κ·Έλλ¨Έκ° μμ μ μ€μλ₯Ό λΉ λ₯΄κ² μΈμ§ν μ μλ€λ μ₯μ μ΄ μμΌλ©°, μν©μ λ°λΌ μ ννμ¬ μ¬μ©νμ€ μ μμ΅λλ€.
enum class CardinalPoints : unsigned char
C++11 λΆν°λ enum νΉμ enum classμ λν΄ μμμ νμ μ μ€μ ν μ μμ΅λλ€. κ°λ₯ν νμ μ μ μ νμ μΌλ‘ νμ λ©λλ€. (int, unsigned int, long, ...)