c++ - 用字符串数组命名结构的成员
问题描述
在我的一个项目中,我需要通过数组内的字符串调用结构的成员/属性(不知道正确的术语)。
注释行中的胖部分 //???? 是问题用户[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;
}
解决方案
创建字符串到成员指针的映射。
#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";
}
推荐阅读
- javascript - npm 错误!找不到模块'./access-error.js'
- android - 使用 lambda forEach Kotlin 遍历列表
- graphics - 碰撞检测的特例
- jupyter-notebook - jupyterhub 上的 Jupyterlab
- filesystems - 硬盘坏了
- java - Spring Boot Security & Vaadin 页面导航&渲染问题
- python-3.x - 如果字符串出现在数据框中,则增加一列
- c# - 创建没有外键的导航属性
- sql - SQL Server 不会将触发器事务回滚到保存点
- vue.js - 在 Vue-CLI 项目中,Babel 没有为 IE11 转换块供应商