Czytam C++ Szablony Complete Guide i natknąłem się na to nie typ kodu parametrów szablonu funkcji (Dodałem main() i inne części, z wyjątkiem definicji funkcji i rozmowy):dla typu szablonu funkcja Parametry
#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;
}
Po przeczytaniu książki nie zrozumiałem, dlaczego potrzebujemy typowania po wywołaniu funkcji?
EDIT: wyjaśnieniu z książki:
add to szablon funkcji i szablony funkcyjne są uważane wymienić zestaw przeciążonych funkcji (nawet jeśli zestaw ma tylko jeden element). Jednakże, zgodnie z aktualnym standardem, zestawy przeciążonych funkcji nie mogą być użyte do dedukcji parametrów szablonu. W ten sposób, masz do oddania do dokładnego typu argumentu szablonu funkcję: ...
Compiler: g ++ 4.5.1 na Ubuntu 10.10