Что означает этот шаблон:
T &operator ()(int x, int y) const
{
if (x >= 0 && x <= mWidth) {
if (y >= 0 && y <= mHeight) {
return data[x + y * mWidth];
}
}
}
делать, если x & y находятся вне диапазона? Вы должны поднять исключение. И как вы распределяете память для сетки в конструкторе? Что касается константности, вам нужно предоставить две версии этого оператора - константную, которая возвращает константную ссылку, и неконстантную, которая возвращает неконстантную ссылку.
Редактировать: у вас также есть одна ошибка в операторе. Это компилирует и запускает:
template <typename T>
struct Grid {
Grid( int x, int y ) : mX(x), mY(y), mData(0) {
mData = new T[ x * y ];
}
~Grid() {
delete [] mData;
}
T &operator ()(int x, int y) {
if (x >= 0 && x < mX) {
if (y >= 0 && y < mY) {
return mData[x + y * mX];
}
}
throw "out of range" ;;
}
int mX, mY
T * mData;
};
int main() {
Grid <int> g(2,3);
g(0,0) = 42;
}