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

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