Здравствуйте, 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.