Я учусь создавать лабиринты с книгой «Лабиринты для программистов: создайте свои собственные маленькие извилистые места».Все примеры приведены на Ruby.В настоящее время я изучаю продвинутый C ++ и хочу преобразовать этот код.
def [](row, column)
return nil unless row.between?(0, @rows - 1)
return nil unless column.between?(0, @grid[row].count - 1)
@grid[row][column] end
#Buck, Jamis. Mazes for Programmers: Code Your Own Twisty Little Passages
#(p. 21). Pragmatic Bookshelf. Kindle Edition.
Приведенный выше код возвращает объект Cell из сетки в заданной строке и столбце, если такая Cell существует.Я рассмотрел переопределение оператора [] в C ++, но реализация Ruby использует 2d массив.Я полностью заблудился, как реализовать это для проверки строк и столбцов.
Вот заголовок для класса сетки:
#include "Cell.h"
class Grid
{
private:
int rows;
int columns;
vector<vector<Cell>> grid;
public:
Grid(int, int);
~Grid();
void prepareGrid();
void configureCells();
Cell &operator[] (int,int);
};
Я хочу иметь возможностьсделать что-то вроде этого:
Cell & Grid::operator[](int row, int column)
{
if (row >= rows) {
return NULL;
}
else if (column >= columns) {
return NULL;
}
else {
return grid[row][column];
}
}
- Редактировать для пояснения
: оператор C ++ [] не допускает более одного параметра, поэтому яне могу проверить как строки, так и столбцы с помощью одного переопределения метода доступа
Я также понимаю, что возвращение NULL недопустимо в этой ситуации, и мне необходимо выяснить, как обойти это.