枚举与字符串转换方法

在代码编辑中,经常需要使用字符串表示状态,而状态变量确是枚举类型,所以一般需要做一个判断转换,正常方法:

if(枚举 == 枚举1)
	return 字符串1
else if(枚举 == 枚举2)
	return 字符串2
else if(枚举 == 枚举3)
	return 字符串3
else if(枚举 == 枚举4)
	return 字符串4
	...

但是有时候需要依据字符串返回枚举类型呢?那怎么处理,还是使用if 语句?那就相对麻烦且不合适,容易出错、遗漏,而且代码改动较大。

下面提供一种枚举与字符串转换的方案。

重点内容:使用键值对绑定枚举与字符串!!!!!

比如这是我们的枚举:

    enum KitUseStatus
    {
    
    
        eNull = 0,      //初始化状态
        eNormal,        //正常状态
        ePreTimeout,    //即将过期
        eTimeout,       //过期
        ePreInvalid,    //即将失效
        eInvalid        //失效
    };

那我们可以依据这个枚举创建一个常量Map(使用Hash也可以)键值对并初始化,代码如下:

const QMap<EKitUseState, QString> useStateMap = {
    
    
    {
    
    EKitUseState::eNull, "无法识别"},
    {
    
    EKitUseState::eNormal, "正常"},
    {
    
    EKitUseState::ePreTimeout, "即将过期"},
    {
    
    EKitUseState::eTimeout, "已过期"},
    {
    
    EKitUseState::ePreInvalid, "即将失效"},
    {
    
    EKitUseState::eInvalid, "已失效"}
};

因为使用const定义的变量需要初始化,且后面无法改变变量的值,所以称为常量。
然后就是对应的两个相互转换的函数:

//枚举类型转字符串
QString useStateToStr(int state)
{
    
    
    return useStateMap[EKitUseState(state)];
}
//字符串转枚举
KitUseStatus strToUseState(QString str)
{
    
    
    return useStateMap.key(str);
}

当我们获取到枚举状态的时候,只要调用useStateToStr函数即可得到枚举对应的字符串,并显示。
相反,使用显示的字符串,调用strToUseState函数可得到对应的枚举类型,然后保存到数据库或者配置文件都行。

Guess you like

Origin blog.csdn.net/weixin_42887343/article/details/120948576