Nell'esempio di codice seguente, la chiamata a foo
funziona, mentre la chiamata a bar
non riesce.Passare una funzione come parametro modello esplicito
Se commento la chiamata a bar
, il codice viene compilato, il che indica che la definizione di bar
è soddisfacente. Quindi, come sarebbe chiamato correttamente bar
?
#include <iostream>
using namespace std;
int multiply(int x, int y)
{
return x * y;
}
template <class F>
void foo(int x, int y, F f)
{
cout << f(x, y) << endl;
}
template <class F>
void bar(int x, int y)
{
cout << F(x, y) << endl;
}
int main()
{
foo(3, 4, multiply); // works
bar<multiply>(3, 4); // fails
return 0;
}
Vedere anche [Funzione passata come argomento modello] (https://stackoverflow.com/q/1174169/608639). – jww