在 C++ 中添加两个 lambda 函数
Adding two lambda-functions in C++
我正在尝试添加两个 c++ lambda 函数。我的意思是:
假设您有两个函数 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.
有谁知道正确的做法吗?或者你知道有哪些图书馆可以开箱即用吗?
很微妙。
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
}
您通过引用捕获 g
和 f
,并将这些引用存储在 std::function
您 return 中。但是那些是对函数局部变量的引用,所以它们会在你 return 的第二个时刻悬空。因此,您的代码只是具有未定义的行为。
一个简单的解决方法是按值 [=]
.
捕获
我正在尝试添加两个 c++ lambda 函数。我的意思是:
假设您有两个函数 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.
有谁知道正确的做法吗?或者你知道有哪些图书馆可以开箱即用吗?
很微妙。
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
}
您通过引用捕获 g
和 f
,并将这些引用存储在 std::function
您 return 中。但是那些是对函数局部变量的引用,所以它们会在你 return 的第二个时刻悬空。因此,您的代码只是具有未定义的行为。
一个简单的解决方法是按值 [=]
.