C++讀取某個數據結構的成員或屬性名

碰到一個問題:有一組數據,可以用map來存儲key-value,但是有多個,該key爲字符串,是確定的、已知的。
想過的方法:
1.用字符串數組存儲,然後讀取進map裏,但這樣這個數組的長度會比較長,看起來比較不美觀。。。。
所以就想能不能有一個結構能夠多個key作爲屬性/成員的,並且能夠讀出屬性/成員名,而不是其對應的值。所以就有了以下的想法:
1)想用struct結構體來完成,但是實在沒想到如果讀到這個成員名
2)用enum的結構來存儲,假定有n個key,則在enum中可以爲0~(n-1)。
那麼寫個函數用switch來進行對比,直接上代碼吧。有點講不過。(這個例子在官方文檔裏有相關的)

typedef enum A
{
    EWKRWE=0,
    FDSA,
    FDASFA,
    FDAER,
    REWG,
    HGDF,
    NUMS = 6
};
//enumeration types (both scoped and unscoped) can have overloaded operators
std::ostream& operator<<(std::ostream& os, A c)
{
    switch(c)
    {
        case  EWKRWE   : os << "EWKRWE";    break;
        case FDSA    : os << "FDSA"; break;
        case  FDASFA: os << " FDASFA"; break;
        case FDAER : os << "FDAER";  break;
        case REWG  : os << "REWG";   break;
        case HGDF  : os << HGDF"; break;
        default    : os.setstate(std::ios_base::failbit);
    }
    return os;
}
int main()
{
    A a = NUMS;
    int nums = a;
    std::map<std::string, int32_t> temp;
    for (int i = 0; i < a; i++)
    {
        std::sstreamstring ss;
        ss << A(i) ;
        temp[ss.str()] = 0;
        }
}
 

以上case裏的表達式也可以直接是0~(n-1)

額外補充,將整數轉成枚舉類型的:
1)利用構造函數

#include <stdio.h>
 
typedef enum
{
    student= 1,
    worker,
    teacher,
    doctor
} Peopletype;
 
//現有一值爲整數i,如何將它賦值給枚舉型變量a,並用printf語句輸出呢?
int main()
{
int i=2;
Peopletype a =Peopletype(i);
printf("%d\n",a);
}

2)利用強制類型轉換

#include <iostream> 
using namespace std; 
 
typedef enum 
{ 
    student= 1, 
    worker, 
    teacher, 
    doctor 
} Peopletype; 
 
void main(void) 
{ 
    Peopletype a = static_cast<Peopletype>(2);
    printf("%d",a);
} 

如果你的轉化值不在枚舉類型包含的值裏面就會出未定義的錯誤的

參考文檔:
官方文檔:https://en.cppreference.com/w/cpp/language/enum
https://docs.microsoft.com/en-us/previous-versions/visualstudio/visual-studio-2013/2dzy4k6e(v=vs.120)
求enum長度:
https://www.cnblogs.com/timssd/p/4078376.html
求元素個數:
https://bbs.csdn.net/topics/70360450/

enumeration用法攻略:
http://c.biancheng.net/view/1367.html
https://www.cnblogs.com/1by1/p/10263212.html
https://www.jianshu.com/p/3b9149a8a603
https://blog.csdn.net/datase/article/details/82773937
整數轉枚舉:
https://bbs.csdn.net/topics/270008507
https://www.csdn.net/gather_2f/NtDaAg2sNzAtYmxvZwO0O0OO0O0O.html

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章