[英]How to capture a variable of this object in lambda?
我已經看到很多關於SO的答案,要求通過引用來捕獲this
,但我有一個不同的問題。 如果我想捕獲this
對象擁有的特定變量, this
怎么辦?
例如:
auto rel_pose = [this->_last_pose["main_pose"],&pose](Eigen::VectorXd pose1, Eigen::VectorXd pose2)
{
// Some code
return pose;
};
我想捕捉的具體變量this
按價值計算,使用它我的lambda表達式內。 為什么這不可能?
這是可能的:
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();
}
您可以使用初始化程序 (因為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中的標識符,我們無法直接捕獲這樣的表達式this->_last_pose["main_pose"]
。 使用初始化程序捕獲只是簡單地解決了這些問題。
為什么這不可能?
有可能,就像其他答案所示。 但你必須明確地做到這一點 。 訪問lambda中當前對象的任何成員將通過this
指針自動轉換為訪問。 當你寫一個普通的[this->_last_pose["main_pose"],&pose]
,真正捕獲的是this
,並且對_last_pose
的訪問_last_pose
通過它。
它只是為成員變量指定lambda捕獲的方式。 不勝感激,你正在編譯C ++ 14。 在C ++ 11中,按值捕獲成員並不像添加執行副本的init捕獲那么容易。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.