我在SO上看到了很多答案,询问通过引用捕获this
的问题,但是我有一个不同的问题。如果我想捕获this
对象拥有的特定变量怎么办?
例如:
auto rel_pose = [this->_last_pose["main_pose"],&pose](Eigen::VectorXd pose1, Eigen::VectorXd pose2)
{
// Some code
return pose;
};
我想按值捕获this
的特定变量,并在我的lambda表达式中使用它。为什么这不可能呢?
答案 0 :(得分: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();
}
答案 1 :(得分:5)
您可以应用by-copy capture with an initializer(自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;
};
请注意,我们只能在lambda中使用capture个标识符,而不能直接捕获this->_last_pose["main_pose"]
之类的表达式。 使用初始化程序捕获可以直接解决此类问题。
答案 2 :(得分:0)
为什么这不可能?
有可能,就像其他答案一样。但是您必须明确地这样做。访问lambda中当前对象的任何成员将自动转换为通过this
指针的访问。当您编写普通的[this->_last_pose["main_pose"],&pose]
时,真正捕获的内容是this
,并且对_last_pose
的访问也会通过它。
这就是为成员变量指定lambda捕获的方式。感谢您正在编译C ++ 14。在C ++ 11中,按值捕获成员并不像添加执行复制的init捕获那样容易。