C++ 枚举到字符串C++;
我通常发现我需要在c语言中将枚举转换为字符串++ 我最后总是做:C++ 枚举到字符串C++;,c++,enums,C++,Enums,我通常发现我需要在c语言中将枚举转换为字符串++ 我最后总是做: enum Enum{ Banana, Orange, Apple } ; char * getTextForEnum( int enumVal ) { switch( enumVal ) { case Enum::Banana: return "bananas & monkeys"; case Enum::Orange: return "Round and orange"; case
enum Enum{ Banana, Orange, Apple } ;
char * getTextForEnum( int enumVal )
{
switch( enumVal )
{
case Enum::Banana:
return "bananas & monkeys";
case Enum::Orange:
return "Round and orange";
case Enum::Apple:
return "APPLE" ;
default:
return "Not recognized..";
}
}
有更好的或公认的习惯用法吗?您可以将枚举值和字符串放入STL映射中。那你就可以这样使用它了
return myStringMap[Enum::Apple];
一种匿名查找表,而不是一个长switch语句:
return (const char *[]) {
"bananas & monkeys",
"Round and orange",
"APPLE",
}[enumVal];
也许使用
std::map
而不是enum和switch?在对象中稍加包装,您就可以使其足够智能,可以作为错误代码查找和处理程序重新用于所有应用程序。一个改进是省略“default:”子句,同时提高编译器的警告级别并将警告视为错误。这样,如果扩展枚举列表,编译器将在switch语句上发出警告并失败,同时提醒您扩展该开关。有些人说你应该总是有一个默认值,但我相信这是一个缺乏实际帮助的场景。只适用于连续枚举。@SasQ,我这里有一个更广泛的答案:该线程中还有很多其他好的建议。@GangaiJohann这只是当它是一个成员函数时。我的做法是对问题中的代码进行尽可能少的更改,以避免不必要的干扰。还有一个代码生成器用于此目的:@ekkis我将使用std::map
。
return (const char *[]) {
"bananas & monkeys",
"Round and orange",
"APPLE",
}[enumVal];