Специализация шаблонной функции против перегрузки

Из некоторых слайдов о специализации шаблонов:

#include <iostream>

using namespace std;

template<class X>
X& min(X& a, X& b)
{
return a > b ? b : a;
}

int& min(int& a, int & b)
{
// rewrite of the function in the case of int:
cout << "int explicit function\n";
return a > b ? b : a;
}

/*
new syntax – the more appropriate way:
template<>
int& min<int>(int& a, int& b)
{
cout << "int explicit function\n";
return a > b ? b : a;
}
*/

Почему второй способ более «уместен»?

5

Решение

Перегрузка прекрасно работает для большинства контекстов, и AFAIK является рекомендуемым базовым подходом. (увидеть GOTW предложено juanchopanza)

Разница возникает, если кто-то явно запрашивает шаблон, вызывая min<int>(x, y), В этом случае перегрузки игнорируются и учитывается только шаблон (базовый или специализированный).

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]