2013-05-16 150 views
2
#include <iostream> 

using namespace std; 

enum color { 
    black=1, blue, green, cyan, red, purple, yellow, white 

} colors; 

int main(){ 
    color mycolor; 
    mycolor = blue; 

    cout << mycolor; 

    return 0; 
} 

對象名稱的顏色有任何用法嗎?我能打印出任何這些顏色的名稱使用枚舉或我只能打印出每個顏色對應的常數?枚舉對象名稱

回答

4

對象名稱顏色是否有用法?

是:如果你想color類型的全局變量,你可以在enum color的聲明之後定義它。

我可以通過枚舉打印出任何這些顏色的名稱嗎?或者我只能打印出每個顏色對應的常數?

不,你將無法打印給定的枚舉值enum成員的名字,除非你建立你自己的代碼系統,通過它,你將能夠「解碼」常量回字符串表示。要做到這一點的一種常見方法是創建字符串文字的平行排列:

#define TO_STR(X) #X 

const char* color_names = {"none", TO_STR(black), TO_STR(blue), TO_STR(green), ...}; 

正如你所看到的,無法枚舉轉換爲字符串不適用於枚舉在編譯時已知常數:您可以使用a preprocessor trick to stringify them

將枚舉值映射到字符串的另一種常見方法是使用std::map<color,std::string>。它與平行數組類似,因爲您需要手動初始化它。對於「標誌」枚舉,即不使用順序值的枚舉,它效果更好。

+0

但是,使用數值的目的是什麼,因爲我將它定義爲顏色,但是我在控制檯上打印出一個數字分支? – 14K

+0

@明目的是提高你的程序的可讀性:'set_color(cyan)'比'set_color(4)'更具描述性。 – dasblinkenlight

+0

你能列舉一個例子嗎? – 14K