Re: operator[][][]
In article <9wMxg.11890$j7.320282@news.indigo.ie>, Frederick Gotham
<fgothamNO@SPAM.com> wrote:
kanze posted:
On the other hand, both C and C++ already have a syntax
for indexing "multiple dimension arrays": [i][j][k]. If at all
possible, a solution should be found which preserves this
notation.
(I still haven't quite formulated this in my mind yet, so I might have a
little difficulty in wording this...)
template <class T,size_t cols,size_t rows>
class Matrix
{
T data[rows*cols];
public:
struct subscript_proxy
{
T *data;
int i;
subscript_proxy(T *a,int b):data(a),i(b){}
T & operator [] (int j) {return data[i+j];}
};
subscript_proxy operator [] (int i)
{
return subscript_proxy(data,i*cols);
}
};
or build an array of T*s in the ctor
template<class T,size_t rows,size_t cols>
class Matrix
{
T data[rows*cols];
T *row_start[rows];
{
Matrix()
{
T *p = data;
for(int i=0;i!=rows;++i,p+=cols)
row_start[i] = p;
}
T * operator [] (int i) {return row_start[i];}
};
now Matrix A;
x = A[i][j] first calls Matrix::operator [](i) and then the
operator [](j) [either the built in for double * , or
subscript_proxy::operator [] depending on which of above
implementations is used ]
---
[ comp.std.c++ is moderated. To submit articles, try just posting with ]
[ your news-reader. If that fails, use mailto:std-c++@ncar.ucar.edu ]
[ --- Please see the FAQ before posting. --- ]
[ FAQ: http://www.comeaucomputing.com/csc/faq.html ]