estoy leyendo C++ plantillas guía completa y me encontré con este no-tipo de código de los parámetros de plantilla de función (He añadido el main() y otras partes, excepto la definición de función y de llamada):de tipo no Parámetros
#include <vector>
#include <algorithm>
#include <iostream>
template <typename T, int value>
T add (T const & element){
return element + value;
}
int main() {
int a[] = {1,2,3,4};
int length = sizeof (a)/sizeof (*a);
int b[length];
std::transform (a, a + length, b, (int(*)(int const &))add <int, 5>); //why?
std::for_each (b, b + length, [](int const & value){ std::cout << value << '\n'; });
return 0;
}
No entendí después de leer el libro ¿por qué necesitamos encasillar la llamada a la función?
EDIT: Explicación del libro:
complemento es una plantilla de función y plantillas de función se consideran para nombrar un conjunto de funciones sobrecargadas (incluso si el conjunto tiene sólo un miembro). Sin embargo, de acuerdo con el estándar actual, los conjuntos de funciones sobrecargadas no se pueden usar para la deducción del parámetro de la plantilla. Por lo tanto, tienen que desechar el tipo exacto del argumento de plantilla de función: ...
Compilador: g ++ 4.5.1 en Ubuntu 10.10