У меня есть шаблон для трехмерного массива, однако у меня возникают проблемы при компиляции, когда переменная типа Chunk (см. Typedef ниже) пытается выполнить индексный доступ.
template <typename T, int xMax, int yMax, int zMax>
class Volume {
public:
class HelperIndex3 {
public:
HelperIndex3(Volume& p, int xx, int yy) : parent(p), x(xx), y(yy) {}
T operator[] (int z) const {return parent.data[x][y][z];}
T& operator[] (int z) {return parent.data[x][y][z];}
private:
Volume& parent;
int x;
int y;
};
class HelperIndex2 {
public:
HelperIndex2(Volume& p, int xx) : parent(p), x(xx) {}
HelperIndex3 operator[] (int y) const {return HelperIndex3(parent, x, y);}
HelperIndex3 operator[] (int y) {return HelperIndex3(parent, x, y);}
private:
Volume& parent;
int x;
};
HelperIndex2 operator[] (int x) const {return HelperIndex2(*this, x);} //problem at this line
HelperIndex2 operator[] (int x) {return HelperIndex2(*this, x);}
private:
T data[xMax][yMax][zMax];
};
typedef Volume<unsigned char, 64, 64, 64> Chunk;
Строка проблемы, кажется, хочет получить const Volume & p в конструкторе HelperIndex2, что, я думаю, имеет смысл, поскольку я пытаюсь использовать const Chunk в другом месте - но я не знаю, как это исправить,Если я добавлю второй конструктор, я должен поддерживать две родительские ссылки, одна из которых постоянна, а другая нет?Я боюсь, что это превратится в беспорядок.Если бы кто-то мог объяснить правильный способ решения этой ситуации, я был бы очень признателен.