C++将参数中的函数传递给另一个函数

ee5*_*725 2 c++ c++11

我试图将函数传递给函数,声明看起来像

double fun1(const double* ang, std::function<double(double)> f1)
Run Code Online (Sandbox Code Playgroud)

main(),我正在创建函数指针并将其指向另一个函数as

std::function<double(double)> f2 = &fun5; //line1
Run Code Online (Sandbox Code Playgroud)

并将函数调用fun1

double x = fun1(&a,f2);
Run Code Online (Sandbox Code Playgroud)

这有效.但是,如果我将函数称为

double x = fun1(&a,&f2);
Run Code Online (Sandbox Code Playgroud)

,它给出了错误

无法将'&f2'从'std :: function*'转换为'std :: function

创建引用工作,line1但调用函数引用不起作用.知道为什么会这样吗?

Jon*_*Mee 6

  • fun5 是一个功能
  • &fun5 是指向类型函数的指针: double (*)(double)
  • f2 是一个特定于类型的仿函数对象: function<double(double)>
  • &f2 是这个类型的仿函数对象的地址: function<double(double)>*

因为fun1期望一个仿函数对象传递它,指向仿函数对象的指针是非法的.int如果这更简单,可以用s来考虑.例如,我有一个功能:void foo(int arg),我有一个int bar我不能做的:

foo(&bar)
Run Code Online (Sandbox Code Playgroud)

这只是简单地传递int*as arg,这显然是非法的.必须发生的是:

foo(bar)
Run Code Online (Sandbox Code Playgroud)

同样,你的函数需要一个仿函数对象.你需要传递函子对象而不是指针,所以:

fun1(&a, f2)
Run Code Online (Sandbox Code Playgroud)