我尝试从 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 函数体,它就会在该时间点取消引用 content、currentStep 和 answers[]。因此,如果“内容”指针在设置和执行 lambda 之间发生变化,则 Answer 对象将与我设置 lambda 时不同。
捕获实际引用以回答自身而不是从 this->content->... 开始的语法会是什么样子?
语法如下所示。
choices.back()->onClick(
[&answer=this->content->currentStep->answers[i]] {decide(answer);}
); // ^^^^^^ creating a named variable in the capture