Аргументы явно специализированной шаблонной функции
Я заинтересовался вопросом явной специализации шаблона функции. Например нужна функция обменом значений переданных аргументов. Если простые типы, структуры и классы, то все пойдет под шаблон - передаю в качестве фактических параметров ссылки на обменяемые объекты и меняю их. Но, если массив или С-строка, то так не пойдет и я решил использовать явную спецификацию(знаю, что можно перегрузку, но хочу со всеми путями разобраться) и передавать указатель на массив, что бы обменять их содержимое. Вот так. Но так не работает, почему? Вот пример прототипов:
template <typename T> void Exchanging(T&, T&); //template
template <> void Exchanging <int*> (int*, int*); //specialization
Возможно есть правила типизации аргументов явно специализированной функции по отношению к шаблонной?
Ответы (1 шт):
Ну вы же сказали, что передавать можно только ссылки. Так и специализируйте соответственно:
template <> void Exchanging (int*&, int*&)
{
...
}