用C ++结合两个lambdas

时间:2014-05-23 23:07:53

标签: c++ lambda

我正在尝试编写以下代码。目的是提供一个lambda函数,用于其他地方,根据一些用户配置将位置转换为速度。

base_vel = [=] (myVectorClass position) { return myVectorClass(0.0, 0.0); };
rand_vel = [=] (myVectorClass position) { return myVectorClass(0.0, 0.0); };

if (base_vel_type == vel_type::TYPE_1) {
   base_vel = [=](myVectorClass position)
   {   // code that finds velocity as a function of position
       return myVectorClass(x, y); };
}

// more types

if (add_random == true);
   rand_vel = [=](myVectorClass position)
   {   // code that finds a random component to velocity
       return myVectorClass(x, y); };
}

return base_vel + rand_vel;

有些东西不能正常工作。我怀疑if语句中的代码不会覆盖先前声明的lambda,或者我在末尾添加的两个lambdas没有按预期工作。这样的lambda函数如何被合并?

感谢您的任何评论。

1 个答案:

答案 0 :(得分:4)

您希望出现

return [=](myVectorClass position) { return base_vel(position) + rand_vel(position); };

根据@ 40的建议:无法分配lambdas,OP需要定义base_velrand_vel(以及提到但未命名的函数的返回)为

std::function<myVectorClass(myVectorClass)> base_rel = //...
std::function<myVectorClass(myVectorClass)> rand_vel = //...
std::function<myVectorClass(myVectorClass)> blah_blah_blah() {
   //...
}

要使那些if语句起作用:D