단일 헤더 파일에 종속성이 없는 깔끔한 구문을 갖춘 반사형 컴파일 타임 열거형 라이브러리입니다.
C++11에서는 컴파일 타임에 모든 것을 사용할 수 있습니다. 열거형을 변환하고, 루프를 반복하고, 최대값을 찾고, 정적으로 규칙을 적용하고, 결과를 템플릿 인수 또는 constexpr
함수로 전달할 수 있습니다. 메타프로그래밍 요구 사항에 따라 모든 반영이 가능합니다.
인터페이스는 C++98과 동일합니다. 대부분의 인터페이스를 런타임에만 사용해야 합니다. 이 라이브러리는 C++98에 내장되지 않은 범위 및 크기의 열거형을 제공합니다.
전체 문서는 프로젝트 페이지를 참조하세요.
프로젝트에 enum.h
추가하기만 하면 됩니다.
iostream
포함하는 것만큼 컴파일러 속도를 늦추려면 수십 개의 열거형을 선언해야 합니다. 가장 큰 제한은 BETTER_ENUM
매크로를 클래스 내에서 사용할 수 없다는 것입니다. 이건 제거가 어려울 것 같습니다. typedef
(또는 using
C++11)에 대한 해결 방법이 있습니다.
BETTER_ENUM (SomePrefix_Color, uint8_t , Red, Green, Blue)
struct triplet {
typedef SomePrefix_Color Color;
Color r, g, b;
};
triplet::Color color;
그러나 네임스페이스 내에서는 BETTER_ENUM
사용할 수 있습니다.
매크로에는 선언된 상수가 64개라는 소프트 제한이 있습니다. 다음 지침에 따라 확장할 수 있습니다. 궁극적으로 상수 수는 컴파일러의 최대 매크로 인수 수에 따라 제한됩니다.
어떤 경우에는 Channel::Red
와 같은 상수 앞에 +
붙여 명시적으로 Channel
유형으로 승격시켜야 합니다. 예를 들어 비교를 수행하는 경우:
channel == +Channel::Red
msvc에서는 switch
케이스 완전성 검사를 받으려면 경고 C4062를 활성화해야 할 수도 있습니다.
라이브러리의 원래 버전은 저자가 2012-2013년 겨울에 Hudson River Trading에서 BETTER_ENUM
이라는 오래된 생성기를 대체하기 위해 개발했습니다.