C++:使用索引访问类成员的最佳方式



我有一个这样的类:

class cpu
{
int r0;
int r1;
int r2;
......
......
int r31;
}

现在有一个类似这样的函数来设置寄存器的值:

void setVal(string regName, int val)
{
//Here I want to do something like this
this->regName = val;
}

寄存器是私有成员,因此无法在外部访问。由于有32个成员,所以使用switch并不是很有效。

如果你不能修改类成员(变量和setVal函数(的签名(或者更好地说,你想维护这个接口(,最好的解决方案是:

在类中声明映射

#include <map>
class cpu
{
int r0;
int r1;
int r2;
......
......
int r31;
std::map<std::string, int*> regNameToVariable;
}

在构造函数中,以这种方式初始化它:

cpu::cpu(){
regNameToVariable["r0"] = &r0;
regNameToVariable["r1"] = &r1;
......
......
regNameToVariable["r31"] = &r31;
}

然后setVal函数如下所示:

void setVal(string regName, int val)
{   
if(this->regNameToVariable.find(regName) != this->regNameToVariable.end()){ //check if register exist in map
this->regNameToVariable.at(regName) = val;
}
}

显然,执行此操作的最佳方法仍然是数组,并将数组的索引作为寄存器的索引。但如果你不能改变你在问题中写的界面,以上是最好的、明智的解决方案。

最新更新