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

我通常发现我需要在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::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];