У меня есть такая конструкция:
template <class T, const size_t size>
using arr = std::array<T, size>;
template <class T, const size_t size>
using arr2 = arr<arr<T, size>, size>;
template <const size_t cell>
class Sudoku {
public:
constexp static const size_t size = cell * cell;
private:
class Slot;
arr2<Slot, size> board;
public:
arr<Slot, cell * cell>& operator[](size_t index);
}
template<const uint cell>
inline arr<typename Sudoku<cell>::Slot, cell * cell>& Sudoku<cell>::operator[](uint index) {
return board[index];
}
Всё прекрасно работает. Но я хотел бы вместо
cell * cell
написать в операторе
size
. Например так:
template <const size_t cell>
class Sudoku {
public:
constexp static const size_t size = cell * cell;
private:
class Slot;
arr2<Slot, size> board;
public:
arr<Slot, size>& operator[](size_t index);
}
template<const size_t cell>
inline arr<typename Sudoku<cell>::Slot, Sudoku<cell>::size>& Sudoku<cell>::operator[](size_t index) {
return board[index];
}
Компилятор пишет:
Sudoku<cell>::operator[]: не удается сопоставить определение функции существующему объявлению
Есть ли способ иной способ так сделать?