Я долгое время изучал/читал о C++, но я почти ничего не написал. Поэтому, несмотря на то, что я хорошо разбираюсь в современной практике C++, у меня все еще нет хороших дизайнов.Могу ли я предотвратить распространение этого шаблона в моем дизайне?
Вот моя проблема. Предположим, у меня есть класс Board
, который представляет игровое поле (например, шахматы, go и т. Д.). Основное хранилище для этой платы - std::array
.
Там еще один класс GameRunner
который владеет Board
и отвечает за запуск правил игры, вести счет и т.д.
Игра плата имеет размер, определенный пользователем. В моей голове GameRunner просто объявлялся как таковой: GameRunner::GameRunner(unsigned size)
, а затем size
Параметр также передается в Совет, который объявлен: Board::Board(unsigned size)
.
Проблема в том, что std::array
должен иметь размер, статически определенный. Поэтому у меня не может быть переменной-члена std::array
, потому что во время компиляции я не знаю, какой будет размер. Я думал, что могу сделать std::unique_ptr
как мой член, а затем указать эту точку на динамически созданный массив, но, конечно, вам нужно определить std::unique_ptr<std::array<???????>>
, где вопросительные знаки обозначают, как я, очевидно, не знаю размер этого массива.
Итак, мое решение состояло в том, чтобы сделать Совет шаблону, чтобы пройти в размере ... так что GameRunner
будет иметь Board<size>
, но тогда, конечно, GameRunner также должен иметь шаблон, так что теперь это шаблоны до конца ...
Так что мне делать здесь? Шаблоны полностью вниз? Использовать контейнер с переменным размером, даже если размер не должен меняться? Я чувствую, что есть что-то невероятно тривиальное, что мне не хватает ...
Вы можете сделать доску размером в векторе ... обменять неизмеримую разницу во времени выполнения для простого кода и ускорить время разработки –