假设我有数据数组 0,0,1,1,2,2,5,5,7,7,2,2 作为类中的数据成员,并且我想在它们中定义下标运算符
[i] 返回我 2*i 数组元素,但我也想让用户设置元素,所以
[i] = n,必须同时应用于 2*i 和 2*i+1。
是否可以通过仅向用户显示下标运算符来做到这一点?
0,0,1,1,2,2,5,5,7,7,2,2
[3] = 4;
0,0,1,1,2,2,4,4,7,7,2,2
另一种解决方法?一般来说,它可能不仅仅是两个元素。
假设我有数据数组 0,0,1,1,2,2,5,5,7,7,2,2 作为类中的数据成员,并且我想在它们中定义下标运算符
[i] 返回我 2*i 数组元素,但我也想让用户设置元素,所以
[i] = n,必须同时应用于 2*i 和 2*i+1。
是否可以通过仅向用户显示下标运算符来做到这一点?
0,0,1,1,2,2,5,5,7,7,2,2
[3] = 4;
0,0,1,1,2,2,4,4,7,7,2,2
另一种解决方法?一般来说,它可能不仅仅是两个元素。
间接地,是的。
您可以使用基本上像函子一样工作的下标运算符返回一个专用类型,并根据您的规范负责分配值:
struct AssignFunctor {
MyArrayType& parent;
size_t index;
AssignFunctor(MyArrayType& parent, size_t index) : parent(parent), index(index) {}
AssignFunctor& operator=(int k) {
parent.set(index,k);
parent.set(index*2,k);
}
operator int() const {
return parent.get(index);
}
};
struct MyArrayType {
AssignFunctor operator[](size_t index) {
return AssignFunctor(*this,index);
}
int operator[](size_t index) const {
return get(index);
}
void set(size_t,int);
int get(size_t) const;
};
我很确定您可以如上所述实现它。但是运算符重载有一个基本规则。 不要改变运算符的含义
从用户的角度来看,您正在设置一个元素,但它也适用于不同的元素。最好提供有意义的功能或更改数据结构的设计。