我正在尝试编写以下代码。目的是提供一个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函数如何被合并?
感谢您的任何评论。
答案 0 :(得分:4)
您希望出现:
return [=](myVectorClass position) { return base_vel(position) + rand_vel(position); };
根据@ 40的建议:无法分配lambdas,OP需要定义base_vel
和rand_vel
(以及提到但未命名的函数的返回)为
std::function<myVectorClass(myVectorClass)> base_rel = //...
std::function<myVectorClass(myVectorClass)> rand_vel = //...
std::function<myVectorClass(myVectorClass)> blah_blah_blah() {
//...
}
要使那些if
语句起作用:D