我试图将函数传递给函数,声明看起来像
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但调用函数引用不起作用.知道为什么会这样吗?
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)
| 归档时间: |
|
| 查看次数: |
75 次 |
| 最近记录: |