我正在使用分而治之的代码。它只是对数组的元素求和: 编辑:没有内联lamda的代码。我想要的是使用二进制操作op,以便我可以在代码中使用任何二进制操作(不仅仅是sum)。例如,传递一个名为op:
的参数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) {:
但我不知道如何使用lambdas以及如何编码这种行为。有人可以向我解释一下吗?
提前致谢
答案 0 :(得分:1)
Lambda作为参数通过std :: function规范传递给类型安全。
#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);
}