簡體   English   中英

如何在lambda中捕獲此對象的變量?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM