在下面的代碼示例中,對foo
的調用有效,而對bar
的調用失敗。將函數作爲顯式模板參數傳遞
如果我將bar
的調用註釋掉,代碼將會編譯,它告訴我bar
本身的定義是正確的。那麼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;
}
另請參閱[函數作爲模板參數傳遞](https://stackoverflow.com/q/1174169/608639)。 – jww