在C++中添加两个 lambda 函数

Adding two lambda-functions in C++

本文关键字:两个 lambda 函数 C++ 添加      更新时间:2023-10-16

我正在尝试添加两个c ++ lambda函数。我的意思如下:

假设您有两个函数fg,每个函数都有一个或多个参数,假设f(x,y)g(x,y)。我想将它们都添加到一个新函数 h 中,如下所示:

h = f + g

评估应该像这样工作:

h(x,y) = f(x,y) + g(x,y)

到目前为止,我已经尝试了以下代码,但它不起作用。末尾的"cin"只是为了防止控制台自动关闭。

#include <iostream>
#include <functional>
using namespace std;

function<int (int,int)> add(function<int(int, int)> g, function<int(int, int)> f)
{
    return [&](int x, int y)->int{return g(x, y) + f(x, y); };
}

int main()
{
    int i = 0;
    function<int (int,int)> sum = [](int x, int y)->int { return x + y; };
    function<int (int,int)> mul = [](int x, int y)->int { return x * y; };
    cout << sum(1, 2) << endl;
    cout << mul(3, 4) << endl;
    function<int(int, int)> s = add(sum, mul);
    cout << s(2, 3) << endl;
    cin >> i;
}

代码编译,但当我尝试计算 s(2,3( 时它停止工作。它只是说程序停止工作,我必须关闭它。我正在使用Visual Studio 2013。

有谁知道如何做到这一点吗?或者你知道任何可以开箱即用的库吗?

这很微妙。

function<int (int,int)> add(function<int(int, int)> g, function<int(int, int)> f)
{
    return [&](int x, int y)->int{return g(x, y) + f(x, y); };
         // ^-- This here
}

您可以按引用捕获gf,并将这些引用存储在返回的std::function中。但是这些是对函数局部变量的引用,所以它们在你返回的那一刻就晃来晃去。因此,您的代码只是具有未定义的行为。

一个简单的解决方法是按值捕获 [=] .