有简单的方法将C+枚举转换成字符串吗?假设我们有一些命名的枚举:enum MyEnum {
FOO,
BAR = 0x50};我在google中搜索的是一个脚本(任何语言),它扫描项目中的所有标头,并生成一个每个枚举都有一个函数的标头。char* enum_to_string(MyEnum t);一个类似这样的实现:char* enum_to_string(MyEnum t){
switch(t){
case FOO:
return "FOO";
case BAR:
return "BAR";
default:
return "INVALID ENUM";
}
}这个问题实际上是带有类型的枚举和未命名的C样式枚举。有人知道这件事吗?编辑:除了生成的函数之外,解决方案不应该修改我的源代码。枚举在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 关注
- 2496 浏览
添加回答
举报
0/150
提交
取消