0

Suppose i've data array 0,0,1,1,2,2,5,5,7,7,2,2 as data member in class and i want to define subscript operator in such they

[i] returns me 2*i element of array but also i want let user to set elements, so

[i] = n, must be applied to both 2*i and 2*i+1.

Is it possible to do it with showing to user only subscript operator?

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

another workarounds? and in general it may be not only two elements.

4

2 に答える 2

1

上記のように実装できると確信しています。しかし、演算子のオーバーロードには基本ルールがあります。 演算子の意味を変更しないでください

ユーザーの観点では、1 つの要素を設定していますが、それは別の要素にも適用されます。意味のある機能を提供するか、データ構造の設計を変更することをお勧めします。

于 2012-09-03T15:42:46.673 に答える
1

間接的に、はい。

基本的にファンクターのように機能し、指定に従って値を割り当てる処理を行う添え字演算子を使用して、専用の型を返すことができます。

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;
};
于 2012-09-03T14:23:09.760 に答える