Вы можете использовать специализацию, когда знаете, что для определенного класса универсальный метод может быть эффективным.
template<typename T>
void MySwap(T& lhs, T& rhs)
{
T tmp(lhs);
lhs = rhs;
rhs = tmp;
}
Теперь для векторов мой обмен будет работать, но он не очень эффективен.Но я также знаю, что std :: vector реализует свой собственный метод swap ().
template<>
void MySwap(std::vector<int>& lhs,std::vector<int>& rhs)
{
lhs.swap(rhs);
}
Пожалуйста, не сравнивайте с std :: swap, который намного сложнее и лучше написан.Это всего лишь пример, показывающий, что универсальная версия MySwap () будет работать, но не всегда может быть эффективной.В результате я показал, как его можно сделать более эффективным с очень специфической специализацией шаблонов.
Конечно, мы также можем использовать перегрузку для достижения того же эффекта.вопрос, зачем использовать специализацию шаблона (если можно использовать перегрузку). Почему так и есть .Не шаблонная функция всегда будет выбираться поверх шаблонной функции.Таким образом, правила специализации шаблонов даже не вызываются (что делает жизнь намного проще, поскольку эти правила причудливы, если вы не юрист, а программист).Итак, позвольте мне подумать секунду. Нет, не могу придумать вескую причину .