Прежде всего, было бы намного проще, если бы вы использовали лучшие массивы.Проблема с C-массивами заключается в том, что они имеют тенденцию легко распадаться на указатели, и как только они это делают, размер теряется (и это, мой дорогой, довольно глупо, насколько я понимаю ...)
Выбор зависит от того, есть ли у вас массивы фиксированного размера или вам нужны массивы динамического размера:
- для фиксированного размера:
std::array
(или если недоступно boost::array
) - для динамического размера:
std::vector
Поскольку шаблон будет иметь больше смысла в случае std::array
, я предполагаю, что это то, что вы выбрали.
char const maze1[10][11]
эквивалентно
std::array<std::array<char, 11>, 10> const maze1
Это немного более многословно, но std::array
предлагает обычные методы-члены, такие как .size()
, .begin()
, .end()
и т. Д., И его можно передаватьв функции легко.
Теперь перейдем к функциям вашего шаблона.Подпись будет просто:
template <size_t M, size_t N>
void solveMaze(std::array<std::array<char, N>, M> const& maze);
Однако, несмотря на ваш вопрос, вы, скорее всего, не захотите использовать здесь шаблоны (они приносят мало пользы).Поэтому я бы посоветовал использовать vector
и обычные функции:
void solveMaze(std::vector< std::vector<char> > const& maze);