C++中的枚举值类型转化为整数和字符串string字符串转化数组
C++中的枚举类型
C++11提供了更安全的枚举类型,不能再直接把这种枚举值当作整数值来使⽤。但如果我们想把它作为整数来使⽤呢?
例如
enum class ElemType
{
CAP,
IND,
VS
};
在以前,我们使⽤枚举类型的时候,没有添加class关键词,可以如下定义,
enum ElemTypeOld
{
CAP = 1,
IND,
VS = 3
};
在定义了某个枚举变量之后,可以将其与整数直接进⾏⽐较。但这样做存在⼀些问题,因为⾃定义的整数值可能不连续,某个定义了,其它的没有定义等。
那么输出ElemTypeOld::IND时,会输出2,但如果把CAP的值改为2,那么IND的值就会是3,这就与VS的值⼀样了。(在ElemType也这样做的时候,也会出现这种情况,类型更安全并不是这个意思。)
在ElemTypeOld⾥⾯,不论是否指定整数值,都可以作为整数值来使⽤,在ElemType⾥⾯,只能作为枚举类型,不能与整数值混⽤。
C++⾥⾯也提供了将其转化为整数的⽅法,
static_cast<int>(ElemType::CAP) -> 0,
如果ElemType⾥⾯指定整数值,就会得到指定的整数值。
本来是想整理将枚举类型转化为字符串输出的,但在将其转化为整数的时候遇到了上⾯的问题。下⾯进⼊正题。
⼀种⽅法使⽤swicth语句,
string getElemTypeName(ElemType type)
{
switch(type)
{
case ElemType::CAP : return "CAP";break;
case ElemType::IND : return "IND";break;
case ElemType::VS : return "VS";break;
default: return "error"; break;
}
}
另⼀种⽅法,定义常量字符串数组,
const char* names[] = {"CAP","IND","VS"};
string getElemTypeName(ElemType type)
{
int idx = static_cast<int>(type);
return names[idx];
}
⽹上还有其他使⽤宏定义之类的⽅法,我觉得这两种⽅法够⽤就可以了。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论