2011-12-12 84 views
0

可能重複:
C++: Print out enum value as textC++詭計:輸出實際枚舉,而不是它的值

說我有一個枚舉:

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

而且,我有一個方法獲取「MyEnum」作爲參數。我想寫日誌文件MyEnum的值,但我不想0,1或2出現在那裏---我想輸出實際的枚舉字符串「MY_ENUM_xxxx」,當然沒有一個開關/外殼塊 .....並分別處理每個值。

是否有一些技巧或模式,在c + +或使用宏,可以幫助我實現這一點?

+0

我相信這是編譯器常量,而不是編譯成的代碼,不像有類型的元數據Java和C#。 –

+0

我知道,這就是爲什麼我還問了這個問題是否存在一個詭計的宏觀方法,這將減輕每個情況下冗長的開關/情況塊的需求... – JasonGenX

回答

1

無需在C++來的typedef

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

不枚舉{} MyEnum;''聲明一個名爲'MyEnum'的全局對象?編寫'enum MyEnum {};'是否更簡單? –

+2

請注意,如果值是手動分配而不是由編譯器順序生成的,則這種情況非常微妙。 –

+0

@AndréCaron - 非常真實 - 我只是把OP的代碼 –