c++ - 给定参数后返回一个函数

标签 c++

我有一个数学函数 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/

相关文章:

C++私有(private)构造函数

java - 如何获得填字游戏的多个解决方案?

c++ - OpenGL 函数实际上是特定于上下文的吗?

C++ 函数在 windows 中完美运行但在 linux 中不完美?

c# - SWIG、Box2D 和 C#

c++ - 二维动态字符数组cpp

c++ - 将更改限制为最大金额

c++ - 在 C++ 中使用初始化列表初始化数据成员引用

c++ - (重新)使用空间索引库加载 R 树

c++ - 需要帮助找到错误(与指向堆栈变量的指针有关)