假设我正在实现一个元素访问运算符 [] 以访问自定义 vector 类中的单个元素。像这样:
vector A;
int a = A[2]; // access the 3rd element
由于operator[]的实现一般都是引用返回,所以也可以链式做下面的操作
A[2] = 7;
我的问题是,在第二种用法 A[2] = 7 中,有没有办法检查正确的操作数,即本例中的 7。我想要这个功能,因为在某些情况下, vector 类将是一个二进制 vector ,因此只能为其分配 0 或 1。我想检查正确的操作数以确保禁止分配 0/1 以外的任何数字。谢谢。
最佳答案
可以考虑两种方式。
第一个是像这样使用代理对象
class vector {
std::vector<int> _v;
public:
vector(int i) : _v(i) {}
class Proxy {
int &_i;
public:
Proxy(int& i) : _i(i) {}
Proxy& operator=(int i) { if (i != 1) throw; _i = i; return *this; }
operator int() { return _i; }
};
Proxy operator[](int i) { return Proxy(_v[i]); }
};
int main()
{
vector v(5);
v[1] = 1; // ok
v[2] = 2; // throw
}
第二种是使用 enum class
或只接受 0 和 1 而不是 int
的类。这个选项在这里可能更好,因为它向用户传达了语义,而使用 int 并不意味着随便的读者 0 和 1 是唯一可接受的值。
关于c++ - 如何检查通过引用返回的函数的正确操作数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48636116/