将指针传递给模板化函数

时间:2015-08-17 17:48:24

标签: c++ templates parameter-passing function-pointers

我的代码的一个版本有效。另一个(我原本认为更可取)无法编译。如果我声明一对简单的函数:

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 (*)())’

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

1 个答案:

答案 0 :(得分:0)

更改定义,如

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

否则,当您明确指定模板参数时,该函数就像

一样专门化
void pass_function( double  * );