【问题标题】:syntax for passing pointer to templated function将指针传递给模板函数的语法
【发布时间】: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


【解决方案1】:

像这样改变定义

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

否则,当您显式指定模板参数时,该函数会被专门化

void pass_function( double  * );

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-10
    • 2020-10-26
    相关资源
    最近更新 更多