Я пытаюсь добавить две лямбда-функции c++. Я имею в виду следующее:
Предположим, у вас есть две функции f
и g
с одним или несколькими аргументами, скажем, 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.
Кто-нибудь знает, как это сделать правильно? Или вы знаете какие-нибудь библиотеки, которые могут сделать это из коробки?