- es una función de plantilla
- es una especialización total de la función de plantilla anterior (no sobrecarga!)
- es una sobrecarga de la función
Aquí está un extracto de C++ Coding Standards: 101 Rules, Guidelines, and Best Practices :
66) No se necesitan plantillas de función
Especializaciones de plantilla de funciones Nunca participe en sobrecargas: por lo tanto, las especializaciones que escriba no afectarán la plantilla que se utilice, y esto va en contra de lo que la mayoría de la gente esperaría intuitivamente. Después de todo, si hubiera escrito una función no explícita con la firma idéntica en lugar de una especialización de plantilla de función, la función no característica siempre se seleccionaría porque siempre se considera que es una mejor coincidencia que una plantilla.
El libro le aconseja añadir un nivel de direccionamiento indirecto mediante la implementación de la plantilla de función en términos de una plantilla de clase:
#include <algorithm>
template<typename T>
struct max_implementation
{
T& operator() (T& a, T& b)
{
return std::max(a, b);
}
};
template<typename T>
T& max(T& a, T& b)
{
return max_implementation<T>()(a, b);
}
Ver también:
No puede especializar plantillas de funciones, el efecto sería el mismo que las sobrecargas normales. – AshleysBrain
@AshleysBrain: Eso está mal. Puedes especializar plantillas de funciones. Usted no puede hacer especializaciones parciales. – sbi
Ooh, eso es lo que quise decir. Gracias. – AshleysBrain