【发布时间】:2015-11-10 11:00:21
【问题描述】:
我的代码的一个版本有效。另一个(我认为更可取的)无法编译。如果我声明一对简单的函数:
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);
我天真地认为这会更好,因为我试图告诉它作为参数传递的函数将返回一个双精度数。但我得到了错误:
error: no matching function for call to ‘pass_function(double (*)())’
所以,显然我对使用模板的语法有一些误解。
【问题讨论】:
-
也许你错过了它,但当它在你第一次尝试“工作”时,
T不是double而是double()。您可以在错误消息中看到这一点。在(*)之后的()被传递给T。您想在参数声明中使用它们,以便T仅使用double。 -
啊,哈!是的,绝对是这样。谢谢@JohannesSchaub-litb!
标签: c++ templates parameter-passing function-pointers