C++:使用索引访问类成员的最佳方式
C++: Best way to access class members using index
我有一个这样的类:
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;
}
}
显然,执行此操作的最佳方法仍然是数组,并将数组的索引作为寄存器的索引。但如果你不能改变你在问题中写的界面,以上是最好的、明智的解决方案。
相关文章:
- 在派生类中使用基类的私有成员变量的最佳方法
- C++:将向量传递到构造函数以创建成员变量的最佳方法?
- 可以具有不同基成员实现的类的最佳实现
- 删除类成员的动态分配内存的最佳方法是什么
- 在指向现有内存地址的 hpp 文件中声明成员函数的最佳方法
- std::使用类成员函数创建线程 - 最佳实践
- 使用相同方法但不同成员类型构建类的最佳方法
- 在函数中使用 const 引用参数访问函数中成员的最佳实践 C++.
- 返回可能在C++中分配在堆栈上的成员时,最佳指针/引用类型是什么
- 成员变量的初始化必须延迟。此类的最佳设计选择是什么?
- 在抽象基类中与抽象类成员合作的最佳方法
- 具有许多成员变量的课程的最佳实践
- 访问成员变量或访问成员函数是最佳选择
- 在C++中将迭代器存储为类成员的最佳实践
- 获取私有实例变量容器成员值的最佳方式
- C++是修改这些对象的向量中所有对象的给定成员的最佳方法
- 复制包含STL成员(如vector)的C++结构的最佳方法是什么
- 最佳实践:访问向量中具有不同成员变量和方法的派生类
- 私有类成员延迟初始化的最佳做法
- 组织专用成员 Vector<Vector 接口的最佳方式<Type>>