내 C++ 03 구성 요소 중 하나에서 enum에서 global const int로 이동 중입니다. enum{ RED=0, GREEN, BLUE };
은 const unsigned int RED = 0, GREEN = 1, BLUE = 2;
증가하는 값으로 전역 변수 초기화
으로 변경되었습니다. 문제는 전역 const 변수에 해당하므로 각 값을 명시 적으로 초기화해야합니다. 전의. 값이 100 인 열거 형을 사용하면 값을 순서대로 유지하는 것이 매우 어렵습니다. 이 열거 형의 중간에서 값을 제거하려는 경우 큰 제거 (즉, 제거 된 열거 형 뒤에 모든 열거 형 값의 값 변경)입니다.
이 해결 방법을 만들었지 만 다른 컴파일러와 대상에서 결과가 보장되는지 여부는 알 수 없습니다.
#define CREATE_GLOBAL_COUNT(name, val) static unsigned int g_counter_##name = val
#define INC_GLOBAL_COUNT(name) g_counter_##name ++
CREATE_GLOBAL_COUNT(color, 0);
const int RED = INC_GLOBAL_COUNT(color),
GREEN = INC_GLOBAL_COUNT(color),
BLUE = INC_GLOBAL_COUNT(color);
편집 : 주요 동기는 헤더 파일 간의 의존성을 줄이는 것입니다. 열거 형을 사용해야하는 구성 요소에는 enum_definition.h 파일이 포함되어야합니다. 새로운 솔루션에서는 전역 변수를 extern하여 사용하면됩니다.
그리고 질문은? –
당신이 인용하는 문제는 enum에도 적용됩니다. * == ++ color *를 명시 적으로 지정하면 이러한 문제가 발생하지 않습니다. 이 경우 매크로는 필요하지 않으며 가능한 경우 사용하지 않는 것이 가장 좋습니다. –
열거 형을 그대로 유지하고자하는 것 같습니다. 왜 그걸 바꾸는거야? –