Re[2]: перегрузка опрератора []
От: Кодт Россия  
Дата: 12.10.04 18:54
Оценка:
Здравствуйте, Shady, Вы писали:

S>Это сделать низзя можешь и не капашиться...


Зя!
Нужно возвращать прокси — объект, представляющий модель одномерного массива.
class dim3
{
public:
  data& at(int x, int y, int z);
  data const& at(int x, int y, int z) const;

  template<class D, class H>
  class dim1
  {
    H* host;
    int x, y;
  public:
    dim1(H* host, int x, int y) : host(host), x(x), y(y) {}
    D operator[](int z) const { return host->at(x,y,z); }
  };

  template<class D, class H>
  class dim2
  {
    H* host;
    int x;
  public:
    dim2(H* host, int x) : host(host), x(x) {}
    dim1<D,H> operator[](int y) const { return dim1<D,H>(host,x,y); }
  };

  dim2<dim3      , data&      > operator[](int x)       { return dim2<dim3      , data&      >(this,x); }
  dim2<dim3 const, data const&> operator[](int x) const { return dim2<dim3 const, data const&>(this,x); }
};

Поскольку прокси возвращаются как rvalue, их операторы должны быть const.
Перекуём баги на фичи!
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.