在C++中组合两个lambda

Combining two lambdas in C++

本文关键字:两个 lambda C++ 组合      更新时间:2023-10-16

我正在尝试编写如下的come代码。其目的是提供一个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,或者我在末尾添加的两个lambda没有按预期工作。像这样的lambda函数应该如何合并?

感谢您的评论。

您想要的显示为

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

根据@40two的建议:不能分配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