C++:如何访问名称存储在数组中的成员变量
C++: How to access a member variable whose name is stored in an array
假设我有一个字符串数组,如下所示:
string registers[2] = {"r0","r1"}
像这样的结构:
struct cpu {
int r1;
}
我试过这样的东西:
cpu *p = (cpu*)malloc(sizeof(cpu));
cout << p->registers[1] << endl;
但这导致了一个编译错误。如何实现?
编辑:问题描述
我需要使用索引访问cpu类的成员,所以我想我可以把成员的名称放在一个数组中,然后使用索引获得成员的名称
您的代码完全错误。表达式p->registers
使用默认运算符->
,该默认运算符要求左手运算符作为指向某个类型的指针,该类型将使用名称为的成员作为右手运算符(registers
(。您的cpu
不包含registers
。
无论出于何种原因,模仿你渴望的行为的步骤:
- 设计了一种方法,通过索引或指向成员的指针将特定的
string
与cpu
的成员关联起来 - 将字符串值映射到指向成员的索引或指针
- C++允许使用成员运算符对其进行封装,这将导致类似
p["r0"]
的内容产生对r0
的引用
在最简单的情况下,当所有元素都是同一类型时,您可以只使用std::map
或类似设计的类,例如
struct cpu {
std::map<std::string, int> registers;
// constructor initializes the map
cpu() : registers ( { {"r0", 0},
{"r1", 0}
})
{}
};
这里表达式CCD_;r0";密钥等
NBcpu对象的创建应该是
cpu *p = new cpu();
下面是一个使用字符串到cpu成员的映射的示例:
#include <iostream>
#include <string>
#include <map>
using namespace std;
struct cpu {
int r0;
int r1;
};
map<string,int cpu::*> registers = {
{"r0",&cpu::r0},
{"r1",&cpu::r1}
};
int main()
{
cpu x{0, 1};
cout << " x.r1 = " << x.r1 << ", x.*registers["r1"] = " << x.*registers["r1"] << "n";
x.*registers["r1"] = 2;
cout << " x.r1 = " << x.r1 << ", x.*registers["r1"] = " << x.*registers["r1"] << "n";
cpu *p = &x;
p->*registers["r1"] = 3;
cout << "p->r1 = " << p->r1 << ", p->*registers["r1"] = " << p->*registers["r1"] << "n";
return 0;
}
请在此处尝试:https://onlinegdb.com/d2KqBH0Mo
这里有一个,就像你最初的例子一样,使用整数索引到数组中:
#include <iostream>
#include <string>
#include <map>
using namespace std;
struct cpu {
int r0;
int r1;
};
int cpu::* registers[] = {
&cpu::r0,
&cpu::r1
};
int main()
{
cpu x{0, 1};
cout << " x.r1 = " << x.r1 << ", x.*registers[1] = " << x.*registers[1] << "n";
x.*registers[1] = 2;
cout << " x.r1 = " << x.r1 << ", x.*registers[1] = " << x.*registers[1] << "n";
cpu *p = &x;
p->*registers[1] = 3;
cout << "p->r1 = " << p->r1 << ", p->*registers[1] = " << p->*registers[1] << "n";
return 0;
}
请在此处尝试:https://onlinegdb.com/3hWpmEijs
相关文章:
- 多维数组存储三种不同的数据类型?
- C++将原始字符数组存储在元组中
- 将十六进制字符数组存储在字节数组中,而无需更改为 ASCII 或其他任何东西
- 我正在编写一个代码来将 int 数组存储在文件中,然后用 c++ 检索它,但是检索第一项是假值,我该如何解决这个问题?
- 如何将元素的索引从2D数组存储到1D数组中,然后交换这些值
- 如何将JSON数组存储在Arduino程序中
- 如何在AVR(例如:ATMega)或Arduino微控制器上制作2D PROGMEM阵列的1D PROGMEM数组(存储
- 使用 char 数组存储数据
- 使用平面数组存储的元组容器
- 数组 存储并要求用户搜索它
- 将值从一个 char 数组存储到另一个 char 数组
- 如何使字符串数组存储在向量中
- 将构造的静态数组存储在多个文件中的内存中
- 将整数数组存储在堆上并通过指针访问它们
- c++声明一个数据类型的字节数组,该数组存储在字符串中
- 使用指针数组存储阶乘计算的所有中间结果
- 使用异构数组存储不同的子类
- 读取文件内容,存储在数组中,向数组添加更多内容,然后将新数组存储在文件C++中
- 尝试将复杂数组存储到类 c++ 中
- 在字节数组存储中嵌入 int/string