我的代码的一个版本有效。另一个(我原本认为更可取)无法编译。如果我声明一对简单的函数:
template<class T>
void pass_function(T (*func))
{
cout << func() << endl;
}
double func_to_pass()
{
return(0);
}
我可以打电话
pass_function(&func_to_pass);
一切都按预期工作。我知道它正在“弄清楚”模板在这里代表双倍,即使我没有告诉它在这次通话中是双倍的。
但是,如果我打电话给
pass_function<double>(&func_to_pass);
天真地,我会认为这会更好,因为我试图告诉它作为参数传递的函数将返回一个double。但是我得到了错误:
error: no matching function for call to ‘pass_function(double (*)())’
所以,很明显我误解了使用模板的语法。
答案 0 :(得分:0)
更改定义,如
template<class T>
void pass_function(T (*func)())
{
cout << func() << endl;
}
否则,当您明确指定模板参数时,该函数就像
一样专门化void pass_function( double * );