我需要将类成员函数“ curve”发送到另一个函数“ fun”,但是在编译过程中会出错。如何正确编码?
使用地址“&”会在C2276中产生结果,而不使用它-C3867。
class Test
{
public:
double v;
double curve(double x)
{
return x + v;
}
Test(double z)
{
v = z;
}
};
double fun(double(*f)(double), double x)
{
return f(x);
}
void main()
{
Test d(2.0);
double r = fun(&d.curve, 3.0);
}
如果可以更改fun
签名,则rafix07的答案是完美的。
如果您不想更改的参数数量fun
,则可能需要编写如下代码:
double fun(double(*f)(double), double x)
{
return f(x);
}
int main() // not void
{
Test d(2.0);
double r = fun([d](double double_){ return d.curve(double_); }, 3.0);
std::cout << r;
}
遗憾的是,它不起作用,因为只有在不使用捕获的情况下,lambda才能存储在函数指针中。
因此,您有2个解决方案:
1)模板
// Must be in .hpp
template <class T>
double fun(T f, double x)
{
return f(x);
}
int main() // not void
{
Test d(2.0);
double r = fun([d](double double_) mutable { return d.curve(double_); }, 3.0);
}
2)std ::功能
#include <functional>
double fun(std::function<double(double)> f, double x)
{
return f(x);
}
注意:您必须使用,mutable
因为double curve(double x)
不是const
,我认为应该使用。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句