Класс сетки с контейнером STL неизвестного размера (не может использовать вектор) - PullRequest
0 голосов
/ 29 марта 2020

Мне нужно создать класс сетки, который использует контейнер STL для хранения ячеек (предопределенное перечисление) для приложения игры из жизни. По сути, файл заголовка должен выглядеть следующим образом:

class Grid {
private:
    std::array<Cell, N> grid_array;
public:
    Grid(const unsigned int width, const unsigned int height);
}

Где длина (N) массива установлена ​​в конструкторе как ширина * высота.

Код должен соответствовать спецификации, где контейнер STL можно использовать очень часто, однако в значительной степени подразумевается, что std::vector не следует использовать.

Я рассмотрел использование указателя на std::array, но читал, что с std::arrays разных размеров принципиально разные типы, реализация указателя была бы невозможна. Есть ли решение, где std::array будет работать?

1 Ответ

1 голос
/ 29 марта 2020

Есть ли какое-нибудь решение, где std :: array будет работать?

Нет, если только размер сетки не известен во время компиляции, и вы не можете сделать его шаблоном параметр.

Я бы использовал std::vector. Другой вариант - std::unique_ptr<Cell[]>, который требует немного больше работы (вам нужно будет предоставить собственный конструктор копирования и оператор присваивания, если вы хотите, чтобы Grid был копируемым).

...