我有一个数学函数 f(x,p)
取决于自变量 x
和参数 p
。我想为 p ( void *)
动态分配内存,并在输入参数值 f
后返回一个函数 g(x)
。我如何在 C++ 中实现它?
更具体地说,这是我希望实现的使用场景:
double x;
p1 = new double[2];
p2 = new double[2];
g1 = f(p1)
g2 = f(p2)
g1(x);
g2(x);
g1(x)
和 g2(x)
是计算 f(x,p1)
和 f(x ,p2)
, 分别。
谢谢。
最佳答案
您要问的是有效地将第一个参数 (p1) “绑定(bind)”到一个函数 (f) 并为第二个参数 (x) 设置一个“占位符”。将其直接转换为 C++11 中的代码,我们可以使用 std::bind
:
auto g1 = std::bind(f, p1, std::placeholders::_1);
g1(x); // calls f(p1, x);
bind
的返回类型未指定,但如果您需要存储 g1
在某个地方你可以将它存储为 std::function<void(double)>
.
或者你可以用 C++14 编写一个通用的双参数 currier:
template <typename F, typename Arg>
auto curry(F f, Arg arg) {
return [f,arg](auto arg2) {
return f(arg, arg2);
};
}
auto g1 = curry(f, p1);
g1(x);
关于c++ - 给定参数后返回一个函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31542538/