【发布时间】:2011-09-11 00:10:59
【问题描述】:
我通常发现我需要在 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..";
}
}
有没有更好的或公认的习惯用法?
【问题讨论】:
-
也许使用
std::map<int, std::string>而不是枚举和开关?通过对对象进行一些封装,您可以使其足够智能,可以作为所有应用程序的错误代码查找和处理程序重用。 -
一项改进是省略“default:”子句,同时提高编译器的警告级别并将警告视为错误。这样,如果您扩展了枚举列表,编译器会在您的 switch 语句上发出警告并失败,同时提醒您扩展 switch。有人说你应该总是有一个默认值,但我相信这是一个缺乏实际上可以帮助你的场景。