C++中的枚舉值類型轉化為整數和字符串


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];
}

網上還有其他使用宏定義之類的方法,我覺得這兩種方法夠用就可以了。



免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM