Почему компилятор использует не специализированный шаблон? - PullRequest
0 голосов
/ 10 апреля 2020

Я реализовывал функцию для сортировки разных контейнеров, содержащих разные типы. Я создал шаблон следующим образом:

template<typename Container>
void mySort(Container& container)

И он работает для всех целей, в которых он мне нужен, однако для аргумента char [] [] я хочу изменить реализацию, поэтому я объявил специализацию шаблона как таковой:

template <>
void mySort<char**>(char**& container)

Но моя программа все еще использует реализацию generi c. В чем причина такого поведения, я допустил ошибки в объявлении специализации?

1 Ответ

1 голос
/ 10 апреля 2020

Для версии char[][] вы можете указать

template <int N, int M>
void mySort (char (&container) [N][M]); // version 1

, и будет создан правильный шаблон-функции и вызван.

Для другой функции-шаблона

template<typename Container>
void mySort(Container& container) // version 2

вы можете использовать их вот так

std::string s;
mySort(s); // calls version 1
char c[10][10] ;
mySort(c); // calls version 2

Обратите внимание, что здесь не происходит никакой специализации. Это полностью отдельные шаблоны функций.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...