传递指针到模板化函数的语法

syntax for passing pointer to templated function

本文关键字:函数 语法 指针      更新时间:2023-10-16

我的一个版本的代码工作。另一个(我本来认为更好)无法编译。如果我声明简单的函数对:

template<class T>
void pass_function(T (*func))
{
  cout << func() << endl;
}
double func_to_pass()
{
  return(0);
}

我可以调用

pass_function(&func_to_pass);

,一切正常。我知道它正在"计算"出模板代表的是double类型,尽管我在调用中没有告诉它它是double类型。

但是如果我调用

pass_function<double>(&func_to_pass);

我天真地认为这会更好,因为我试图告诉它作为参数传递的函数将返回double类型。但是我得到了错误:

error: no matching function for call to ‘pass_function(double (*)())’

所以,很明显我误解了使用模板的语法。

将定义更改为

template<class T>
void pass_function(T (*func)())
{
  cout << func() << endl;
}

否则,当显式指定模板参数时,函数将被特化,如

void pass_function( double  * );