C++ 将lambda函数传递给泛型函数C++;
我正在使用分而治之的方法编写代码。它只是对数组的元素求和: 编辑:没有内联lamda的代码。我想要的是使用二进制运算op,这样我就可以在代码中使用任何二进制运算(而不仅仅是求和)。例如,传递名为op的参数:C++ 将lambda函数传递给泛型函数C++;,c++,lambda,C++,Lambda,我正在使用分而治之的方法编写代码。它只是对数组的元素求和: 编辑:没有内联lamda的代码。我想要的是使用二进制运算op,这样我就可以在代码中使用任何二进制运算(而不仅仅是求和)。例如,传递名为op的参数: long reduce_rec(const long *A,long low,long high,myfunclambdahere op) { long result; long n = high - low; if (n == 0){ return 0;
long reduce_rec(const long *A,long low,long high,myfunclambdahere op)
{
long result;
long n = high - low;
if (n == 0){
return 0;
}
else if(high - low == 1){
return A[low];
}
else{
long mid=(low+high)/2;
long a,b;
a = reduce_rec(A,low,mid);
b = reduce_rec(A,mid,high);
//result = a + b;
result = myfunclambdahere(a,b);
}
return result;
}
现在,我想使用这个函数,以便可以使用传递给我的函数的任何运算符op(二进制运算符)。我读到这可以用lambda函数来完成,但是我对C++没有那么熟悉。
他们给了我以下模板
template <class Assoc_comb_op>
value_type reduce_rec(Assoc_comb_op op, long *source, const value_type lo, const value_type hi) {:
模板
值\u类型减少\u记录(关联\u组合\u操作,长*源,常量值\u类型lo,常量值\u类型hi){:
但是我不知道如何使用lambdas以及如何对这种行为进行编码。有人能给我解释一下吗
提前感谢Lambda通过std::function specification作为参数传递,用于类型安全
#include <functional>
long reduce_rec(const long *A, long low, long high,
const std::function<long(long, long)>& op)
{
long result;
long n = high - low;
if (n == 0){
return 0;
}
else if(high - low == 1){
return A[low];
}
else{
long mid=(low+high)/2;
long a,b;
a = reduce_rec(A, low, mid, op);
b = reduce_rec(A, mid, high, op);
//result = a + b;
result = op(a,b); // lambda call here
}
return result;
}
int caller()
{
auto lambda = [](long a, long b){ return (a + b) * (a - b); };
return reduce_rec(nullptr /*your data*/, 10, 1110, lambda);
}
#包括
长减记录(常数长*A、长低、长高、,
常量标准::函数和操作)
{
长期结果;
长n=高-低;
如果(n==0){
返回0;
}
否则如果(高-低==1){
返回一个[低];
}
否则{
中长=(低+高)/2;
长a,b;
a=减少(a、低、中、op);
b=减少(A、中、高、op);
//结果=a+b;
result=op(a,b);//在这里调用lambda
}
返回结果;
}
int调用者()
{
自动lambda=[](长a,长b){返回(a+b)*(a-b);};
返回reduce_rec(nullptr/*您的数据*/,101110,lambda);
}
那么,我如何实现这个行为?你能为此提供代码吗?试着在你的函数定义前面添加模板
。然后在其他地方,定义一个lambda并将它传递给你的reduce函数:auto mylambda=[x,y](int x,int y){return x+y;};reducerec(data,low,high,mylambda);
。别忘了更新函数实现,以便将lambda也传递给递归调用。didrec,您不需要捕获lambda参数。谢谢,如果我想执行max,那么我在aut lambda函数中使用return max(a,b),对吗?