首页 > 解决方案 > 用字符串数组命名结构的成员

问题描述

在我的一个项目中,我需要通过数组内的字符串调用结构的成员/属性(不知道正确的术语)。

注释行中的胖部分 //???? 是问题用户[i]。members[j]是胡说八道,我知道这一点,但我就是不知道那里会有什么。

提前感谢您的帮助:D

struct person {         // Eigenschaften des Eintrags
    string name;        //nachname
    string vorname;     //vorname
    string telefon;     // telfonnummer
};
const int numbr_struct_att = 3;
const string members[numbr_struct_att] = { "name","vorname","telefon" };   

 
cout << setw(5) << left << "Index" << setw(20) << left << "Name" << setw(20) << left << "Vorname" << setw(20) << left << "Telefon" << endl;                           // Header
        for (int i = 0; i <= usernum; i++) {
            cout << setw(5) << left << i+1;
            for (int j = 0; j < numbr_struct_att; j++) {
                cout << setw(20) << left << users[i].members[j] // ?????
            }
            cout << endl;
        }

标签: c++struct

解决方案


创建字符串到成员指针的映射。

#include <map>
#include <string>
#include <iostream>
struct person {         // Eigenschaften des Eintrags
    std::string name;        //nachname
    std::string vorname;     //vorname
    std::string telefon;     // telfonnummer
};

// map names of variables to person member pointers to strings
std::map<std::string, std::string person::*> somemap{
     { "name", &person::name },
     { "vorname", &person::vorname },
};

// then just get the member pointers and call it on a instance of a person:
int main() {
    person myperson{"my name"};
    std::string I_choose_you = "name";
    std::string persons_name = myperson.*somemap.find(I_choose_you)->second;
    std::cout << persons_name << "\n";
}

螺栓链接


推荐阅读