gpt4 book ai didi

C++ 传递一个函数作为参数

转载 作者:行者123 更新时间:2023-11-30 02:35:58 25 4
gpt4 key购买 nike

我需要在 C++ 中调用库函数,它具有以下形式:

double brents_fun(std::function <double(double)> f);

我可以通过以下方式调用这个函数:

double fun1(double x)
{
return -2.0*x+1;
}

void main()
{
brents_fun(fun1);
return 0;
}

我想将另一个函数传递给 brents_fun,例如:

double fun2(double x, double y)
{
return -2.0*x+y;
}

void main()
{
y=12.0;
brents_fun( fun2(x,y=12) );
return 0;
}

在我的真实代码中,y 很复杂。我需要从文件中读取数据,对数据进行一些计算以生成 y。这就是为什么我在 fun2 中需要两个参数 x 和 y。 y 在调用 brents_fun 期间不会改变。

既然y没变,有没有办法把fun2传给brents_fun?

谢谢。

最佳答案

你基本上想部分应用一个函数,将其作为参数传递给 brents_fun,这是可能的,在 C++11 中你有两种方法可以做到这一点:

  • 使用 lambda
  • 使用 std::bind

两种解决方案:

double brents_fun(std::function <double(double)> f)
{
return f(0.0);
}

double fun1(double x, double y)
{
return x+y;
}

int main() {
double res1 = brents_fun([](double x) { return fun1(x, 12.0); });
double res2 = brents_fun(std::bind(fun1, placeholders::_1, 12.0));
}

虽然 lambda 更适合一般优化,但两种解决方案是等价的。 std::bind 可以是多态的,而 lambda 不能,但这不是你所处情况的重点。我会说只要坚持你喜欢的语法。

关于C++ 传递一个函数作为参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33270337/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com