在另一个 lambda 中使用 lambda 捕获 C++11 变量

标签 c++ c++11 lambda

在 node.js 中,我可以在 lambda 中编写 lambda 并捕获我想要的任何变量。但在 C++11 中,由于 lambda 函数实际上是仿函数对象,因此使用嵌套的 lambda 捕获变量并不那么容易。

我正在使用 [this] 来捕获这个指针,这样我就可以使用类成员了。但是在 lambda 内部,this 指针指向 lambda 而不是外部类。

void MyClass::myFunction() {
    // call the lambda1
    connect(action, trigger, [this]() {
        // in the lambda1, call lambda2
        sendCommand([this]() {      // <-- I want `this` point to the outter class
            this->myMember.log("something");  // myMember is the member of class MyClass
        });
    });
}

我知道可以通过将 this 重命名为另一个指针变量并捕获该变量而不是 this 来完成,但我认为这种方式很丑陋。

有没有更好的方法来捕获外部this

最佳答案

您只需捕获外部 lambda 的上下文:

#include <iostream>

struct Omg
{
  int lol= 42;

  Omg()
  {
    [this]{ [&]{ std::cout<< this-> lol; }(); }();
  }
};

int main(){ Omg(); }

关于在另一个 lambda 中使用 lambda 捕获 C++11 变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24388577/

相关文章:

c++ - 处理 OpenCL 结构缓冲区的正确方法是什么?

c++ - 如何在子类(C++)中专门化模板方法?

c++ - 使用元组累加器减少推力

c++ - 来自特定位置的 upper_bound 函数而不是 data.begin()

c++ - 递归函数 - 删除特殊字符

c++ - 将列表映射到不同类型

c++ - 管理磁盘上许多 GB 的数据,直接访问

c++ - 在 C++ 中将我的类分离到不同的头文件中

c++ - 从字节和切片中获取位 2 位对

python - 使用 lambda 作为约束函数