在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
中。但是这些是对函数局部变量的引用,所以它们在你返回的那一刻就晃来晃去。因此,您的代码只是具有未定义的行为。
一个简单的解决方法是按值捕获 [=]
.
相关文章:
- 如何在C++中从两个单独的for循环中添加两个数组
- 为什么两个不同的未命名名称空间可以共存于一个cpp文件中
- 当在同一名称空间中有两个具有相同签名的函数时,会发生什么
- 如何返回一个类的两个对象相加的结果
- 如何在C++中将一个无符号的 int 转换为两个无符号的短裤?
- 如何将两个不同矢量的同一位置的两个元素组合在一起
- 两个字符串在 c++ 中不相等
- 在两个类中共享相同的函数调用,并在不需要时避免空实例化
- 两个文件使用彼此的功能-如何解决
- 为什么Mat类的两个对象可以在不重载运算符+的情况下添加
- 从两个 lambda 的函数返回 lambda 时的链接器错误
- 如何通过返回类型区分两个 lambda 函数?
- 在C++中添加两个 lambda 函数
- 按两个条件对lambda表达C 进行排序
- 如何在C++中使用单个模板参数传递两个 lambda 函数
- 为什么lambda函数用于stl函数,例如sort(),c 中的max_element()函数以两个参数为输入
- 传递给template函数的两个lambda使得参数的类型推导不明确——为什么
- C++lambda的两个复制构造函数调用
- 在C++中组合两个lambda
- 在两个 lambda 之间共享变量