我在SO上看到了许多答案,询问this通过引用进行捕获,但是我有一个不同的问题。如果要捕获this对象拥有的特定变量怎么办?
例如:
auto rel_pose = [this->_last_pose["main_pose"],&pose](Eigen::VectorXd pose1, Eigen::VectorXd pose2)
{
// Some code
return pose;
};
Run Code Online (Sandbox Code Playgroud)
我想this按值捕获特定的变量,并在我的lambda表达式中使用它。为什么这不可能呢?
小智 5
这是可能的:
struct S
{
int i = 7;
char c = 0;
};
int main(int argc, char* argv[])
{
S s;
auto l = [integer = s.i]() {
return integer;
};
return l();
}
Run Code Online (Sandbox Code Playgroud)
您可以使用初始化程序(自C ++ 14起)进行按拷贝捕获(或根据初始化程序进行按引用捕获),例如
auto rel_pose = [some_pose = this->_last_pose["main_pose"], &pose](Eigen::VectorXd pose1, Eigen::VectorXd pose2)
{
// Some code using some_pose
return pose;
};
Run Code Online (Sandbox Code Playgroud)
请注意,我们只能捕获 lambda中的标识符,而不能this->_last_pose["main_pose"]直接捕获类似的表达式。将与初始化捕获只是解决这些问题简单。