2011-05-29 105 views
2

我有一個枚舉,我正在做一個cout,如在:cout << myenumC++ cout和枚舉表示

當我調試時,我可以看到該值爲整數值,但當cout吐出時,它顯示爲文本表示。

任何想法cout在幕後做了什麼?我需要相同類型的功能,並且有那些將枚舉值轉換爲字符串的示例,但似乎我們需要知道這些值提前。就我而言,我不知道。我需要使用任何ol'枚舉並獲取其文本表示。在C#中它是一塊蛋糕; C++ ..不容易。

我可以採取整數值,如果我需要並適當地轉換它,但字符串會給我正是我需要的。

更新:

非常感謝大家對這個問題的貢獻。最終,我在一些隱藏的代碼中找到了我的答案。有一種方法將枚舉值轉換爲表示實際移動的字符串,例如「exd5」。在這種方法中,雖然他們正在做一些非常狂野的東西,但我現在暫時忘記了。我的主要目標是獲得字符串表示。

+2

「當」cout「吐出來時,它顯示爲文本表示形式」 - 你確定嗎?如果是這樣,有些事情是錯誤的!請發佈演示代碼。 – 2011-05-29 17:44:04

+1

@ Neil:錯? IOStreams如何將'int'本地轉換爲詞法表示「遠大錯誤」? [編輯:啊,你讀在枚舉的符號表示] – 2011-05-29 17:45:45

回答

0

此功能來自IOStreams庫。 std::coutstd::ostream

std::stringstream也是std::ostream

int x = 5; 
std::stringstream ss; 
ss << x; 

// ss.str() is a string containing the text "5" 
3

Enum.hpp:

enum Enum { 
    FOO, 
    BAR, 
    BAZ, 
    NUM_ENUMS 
}; 

extern const char* enum_strings[]; 

Enum.cpp:

const char* enum_strings[] = { 
    "FOO", 
    "BAR", 
    "BAZ", 
    "NUM_ENUMS", 
    0 }; 

然後,當我要輸出的枚舉的符號表示,我使用std::cout << enum_strings[x]

因此,你確實需要知道字符串的值,但只有在一個地方—沒有你到處使用這個。

+0

這肯定會做到這一點。作爲我上面的評論之一,我不知道設計時的價值。我想我可以使用鍵值對動態地建立一個哈希表,並通過我返回的「int」來訪問它。感謝您的代碼示例。 – David 2011-05-29 18:19:22

+0

如果您將一個新項目添加到'Enum'並忘記將一個新的字符串添加到'enum_strings',那麼最終可能會導致未定義的行爲。 – Steve 2014-12-03 21:19:34