枚举到字符串C++
可能重复:
Is there a simple script to convert C++ enum to string?枚举到字符串C++
我经常觉得我需要一个枚举转换为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..";
}
}
有没有更好的或公认的习惯用法?
enum Enum{ Banana, Orange, Apple } ;
static const char * EnumStrings[] = { "bananas & monkeys", "Round and orange", "APPLE" };
const char * getTextForEnum(int enumVal)
{
return EnumStrings[enumVal];
}
仅适用于连续枚举。 – SasQ 2012-12-12 06:40:30
@SasQ,我在这里有一个更广泛的答案:http://stackoverflow.com/a/11586083/5987该线程也有很多其他的好建议。 – 2012-12-12 15:27:55
更好的原型是'const char * getTextForEnum(int)const;'我的朋友。最佳实践。 – 2016-04-12 17:30:19
您可以将枚举值和字符串放入STL映射中。那么你可以像这样使用它。
return myStringMap[Enum::Apple];
匿名查找表的,而不是长期switch语句:
return (const char *[]) {
"bananas & monkeys",
"Round and orange",
"APPLE",
}[enumVal];
也许使用'的std ::地图的'代替枚举和开关?通过对对象进行一些包装,您可以使它足够聪明,可以重用为所有应用程序的错误代码查找和处理程序。 – AJG85 2011-06-08 15:44:59
一个改进是省略'default:'子句,同时调高编译器的警告级别并将警告视为错误。这样,如果你扩展了枚举列表,编译器会在你的switch语句中发出警告并失败,提醒你扩展交换器。有些人说你应该总是有一个默认的,但我相信这是一个缺乏实际可以帮助你的场景。 – 2011-06-08 15:46:15