2011-12-12 2 views
0

가능한 중복 :C++ 속임수 : 출력 실제 열거하지 값

typedef enum MyEnum_ 
{ 
    MY_ENUM_BLUE, 
    MY_ENUM_RED, 
    MY_ENUM_GREEN 
} MyEnum; 

내가 방법을 가질 수 :
C++: Print out enum value as text

내가 열거를 말해봐 매개 변수로 "MyEnum"을 가져옵니다. 그 MyEnum의 값을 로그 파일에 기록하고 싶습니다만, 거기에 0, 1 또는 2를 표시하고 싶지 않습니다 --- 실제 열거 문자열 "MY_ENUM_xxxx"을 출력하고 싶습니다. 물론 없이 switch/case 블록 ..... 그리고 각 값을 개별적으로 처리합니다.

C++ 또는 그 달성에 도움이되는 매크로를 사용하여 몇 가지 속임수 또는 패턴이 있습니까?

+0

을 형식 정의를 필요가 없습니다. –

+0

그렇기 때문에, 이것에 대한 트릭 매크로 접근법이 있는지 물었습니다. 각 사례에 대해 길다란 스위치/케이스 블록의 필요성을 완화시켜줍니다 ... – JasonGenX

답변

1

C++로 나는이 컴파일러의 상수 및 유형에 대한 메타 데이터가 자바와 C#과 달리, 코드로 컴파일 믿지

enum MyEnum_ 
{ 
    MY_ENUM_BLUE, 
    MY_ENUM_RED, 
    MY_ENUM_GREEN 
} MyEnum; 

#define TOSTR(x) #x 

const char *names[]={TOSTR(MY_ENUM_BLUE), 
       TOSTR(MY_ENUM_RED), 
       TOSTR(MY_ENUM_GREEN)}; 

int main(int argc, char *argv[]) 
{ 
    MyEnum_ e=MY_ENUM_RED; 

    std::cout << names[e] << std::endl; 

    return 0; 
} 
+0

'enum ... {} MyEnum; MyEnum이라는 전역 객체를 선언 하시겠습니까? 'enum MyEnum {};이라고 쓰는 것이 더 간단하지 않습니까? –

+2

값이 수동으로 할당되고 컴파일러에서 순차적으로 생성되지 않는 경우이 상황은 정교합니다. –

+0

@ AndréCaron - 매우 사실 - 나는 OP의 코드를 단순히 c & p. –