열거 형 클래스 ( "new enums", "strong enums")는 기존 C ++ 열거 형의 세 가지 문제를 해결합니다.
- 관습
enums
적으로 암시 적으로로 변환하여 int
누군가 열거 형이 정수로 작동하는 것을 원하지 않을 때 오류를 발생시킵니다.
- 기존
enums
의 열거자를 주변 범위로 내 보내면 이름 충돌이 발생합니다.
- 의 기본 유형을
enum
지정할 수 없으므로 혼동, 호환성 문제가 발생하고 앞으로 선언 할 수 없습니다.
enum class
( "strong enums")은 강력한 형식과 범위가 지정됩니다.
enum Alert { green, yellow, orange, red };
enum class Color { red, blue };
enum class TrafficLight { red, yellow, green };
Alert a = 7;
Color c = 7;
int a2 = red;
int a3 = Alert::red;
int a4 = blue;
int a5 = Color::blue;
Color a6 = Color::blue;
표시된대로 기존 열거 형은 평소와 같이 작동하지만 이제 선택적으로 열거 형 이름으로 한정 할 수 있습니다.
새 열거 형은 기존 열거 형 (이름 값)의 측면과 클래스 측면 (범위가 지정된 멤버 및 변환 없음)을 결합하기 때문에 "열거 형 클래스"입니다.
기본 유형을 지정할 수 있으므로 상호 운용성이 더 간단하고 열거 크기가 보장됩니다.
enum class Color : char { red, blue };
enum class TrafficLight { red, yellow, green };
enum E { E1 = 1, E2 = 2, Ebig = 0xFFFFFFF0U };
enum EE : unsigned long { EE1 = 1, EE2 = 2, EEbig = 0xFFFFFFF0U };
또한 열거 형을 앞으로 선언 할 수 있습니다.
enum class Color_code : char;
void foobar(Color_code* p);
enum class Color_code : char { red, yellow, green, blue };
기본 유형은 부호있는 또는 부호없는 정수 유형 중 하나 여야합니다. 기본값은 int
입니다.
표준 라이브러리에서 enum
클래스는 다음에 사용됩니다.
- 매핑 시스템 특정 오류 코드 : In
<system_error>
: enum class errc
;
- 포인터 안전 표시기 : In
<memory>
:enum class pointer_safety { relaxed, preferred, strict };
- I / O 스트림 오류 : 입력
<iosfwd>
:enum class io_errc { stream = 1 };
- 비동기 통신 오류 처리 : In
<future>
:enum class future_errc { broken_promise, future_already_retrieved, promise_already_satisfied };
이들 중 일부에는 ==
정의 된 것과 같은 연산자가 있습니다 .
enum class Colours
와enum class Fruits
. 내가 VS 2010의 코드를 쓸 때이 오류가 발생하기 때문에"expects a defination or a tag name"
아래를class
.