如何在 lambda 中捕获类成员的类成员

问题描述 投票:0回答:1

我尝试从 lambda 类的函数中捕获某个类成员的类成员。

澄清一下:ClassA 有一个 ClassB 类型的类成员,它有一个成员 C(例如指针)。 ClassA 有一个将 lambda 附加到某个对象 O 的函数。该 lambda 需要引用 C(在 lambda 附加到对象 O 时)。

我使用的更具体的代码是这样的。其中 decide 是另一个接受答案对象的类函数。 i 是我的 for 循环的控制变量:

choices.back()->onClick([this, i] {decide(this->content->currentStep->answers[i]); });

这里的问题是,据我了解,我通过值捕获了 this,它是一个指针(这很好)。不过,据我了解,一旦执行 lambda 函数体,它就会在该时间点取消引用 contentcurrentStepanswers[]。因此,如果“内容”指针在设置和执行 lambda 之间发生变化,则 Answer 对象将与我设置 lambda 时不同。

捕获实际引用以回答自身而不是从 this->content->... 开始的语法会是什么样子?

c++ pointers lambda
1个回答
1
投票

语法如下所示。

choices.back()->onClick(
    [&answer=this->content->currentStep->answers[i]] {decide(answer);}
); // ^^^^^^ creating a named variable in the capture  
© www.soinside.com 2019 - 2024. All rights reserved.