Я не могу найти ответ на этот вопрос в Google.
Когда я должен использовать шаблоны против перегрузки шаблонов против перегрузки простых функций?
У меня есть предпочтение всегда использовать шаблоны,мне кажется, что это менее типичный и более общий код, но я начал задавать себе вопрос, почему люди даже используют перегрузку функций, когда у нас есть шаблоны.
Единственное отличие, которое я вижу, состоит в том, что в случае шаблонов объявление шаблона по умолчаниюбудет обрабатывать все случаи, которые не подходят для особых случаев, в то время как для простых функций нам пришлось бы писать как минимум вдвое больше кода.
Также в третьем примере ниже иногда достаточно одного шаблона.Итак, главный вопрос здесь - зачем беспокоиться о простой перегрузке функции?
Например:
void func(int param)
{
// ...
}
void func(double param)
{
// ...
}
void func(char param)
{
// ...
}
То же самое можно сделать с помощью шаблонов:
template<typename T>
void tmpl(T param)
{
// ...
}
template<>
void tmpl(double param)
{
// ...
}
template<>
void tmpl(char param)
{
// ...
}
В большинствев случаях, когда нам даже не нужно перегружать шаблоны, потому что все, что нам нужно, - это убедиться, что размер типа данных правильный, а алгоритм функции одинаковый.
Так что в этих случаях мы можем просто написать это:
template<typename T>
void tmpl(T param)
{
// ...
}
в то время как с простой функцией нам нужно было бы сделать гораздо больше работы.
РЕДАКТИРОВАТЬ: Я нашел этот хороший ответ, который несколько уместенно не охватывает полностью мой вопрос: