如何使用下标运算符中指定的值做一些事情

How to do some stuff with values assigned in subscript operator?

本文关键字:下标 何使用 运算符      更新时间:2023-10-16

假设我有数据数组0,0,1,1,2,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;
};

我确信您可以如上所述实现它。但运营商超载有一条基本规则。不要更改操作员的含义

从用户的角度来看,您正在设置一个元素,但它也应用于另一个元素。最好提供有意义的功能或更改数据结构的设计。