有簡單的方法將C+枚舉轉換成字符串嗎?假設我們有一些命名的枚舉:enum MyEnum {
FOO,
BAR = 0x50};我在google中搜索的是一個腳本(任何語言),它掃描項目中的所有標頭,并生成一個每個枚舉都有一個函數(shù)的標頭。char* enum_to_string(MyEnum t);一個類似這樣的實現(xiàn):char* enum_to_string(MyEnum t){
switch(t){
case FOO:
return "FOO";
case BAR:
return "BAR";
default:
return "INVALID ENUM";
}
}這個問題實際上是帶有類型的枚舉和未命名的C樣式枚舉。有人知道這件事嗎?編輯:除了生成的函數(shù)之外,解決方案不應該修改我的源代碼。枚舉在API中,所以使用到目前為止提出的解決方案并不是一種選擇。
3 回答

慕工程0101907
TA貢獻1887條經驗 獲得超5個贊
<GCC_XML> <Namespace id="_1" name="::" members="_3 " mangled="_Z2::"/> <Namespace id="_2" name="std" context="_1" members="" mangled="_Z3std"/> <Enumeration id="_3" name="MyEnum" context="_1" location="f0:1" file="f0" line="1"> <EnumValue name="FOO" init="0"/> <EnumValue name="BAR" init="80"/> </Enumeration> <File id="f0" name="my_enum.h"/></GCC_XML>

繁花如伊
TA貢獻2012條經驗 獲得超12個贊
#include <iostream>enum Colours {# define X(a) a,# include "colours.def"# undef X ColoursCount};char const* const colours_str[] = {# define X(a) #a,# include "colours.def"# undef X 0};std::ostream& operator<<(std::ostream& os, enum Colours c){ if (c >= ColoursCount || c < 0) return os << "???"; return os << colours_str[c];}int main(){ std::cout << Red << Blue << Green << Cyan << Yellow << Magenta << std::endl;}
X(Red)X(Green)X(Blue)X(Cyan)X(Yellow)X(Magenta)
#define X(a, b) a,#define X(a, b) b,X(Red, "red")X(Green, "green")// etc.

Qyouu
TA貢獻1786條經驗 獲得超11個贊
#define SOME_ENUM(DO) \ DO(Foo) \ DO(Bar) \ DO(Baz)#define MAKE_ENUM(VAR) VAR,enum MetaSyntacticVariable{ SOME_ENUM(MAKE_ENUM)};#define MAKE_STRINGS(VAR) #VAR,const char* const MetaSyntacticVariableNames[] = { SOME_ENUM(MAKE_STRINGS)};
- 3 回答
- 0 關注
- 2524 瀏覽
添加回答
舉報
0/150
提交
取消