我有一个这样的类:
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;
}
}
显然,执行此操作的最佳方法仍然是数组,并将数组的索引作为寄存器的索引。但如果你不能改变你在问题中写的界面,以上是最好的、明智的解决方案。