21xrx.com
2024-11-10 00:32:18 Sunday
登录
文章检索 我的文章 写文章
C++ lambda表达式中如何捕获this指针
2023-07-07 20:30:46 深夜i     --     --
C++ lambda表达式 捕获 this指针

C++ lambda表达式是一种方便的函数对象表示方式,可以在函数内部定义并返回一个匿名函数对象。在很多情况,我们需要使用lambda表达式捕获当前的this指针以便在外部使用,下面介绍C++ lambda表达式中如何捕获this指针。

在C++11之前,我们需要手动通过一个指针来捕获this指针,例如:


class Foo {

public:

  void bar() {

    auto func = [](Foo* self) {

      // 使用self指针

      self->print();

    };

    func(this); // 使用this指针

  }

  void print()

    std::cout << "Hello

};

在lambda表达式中使用了一个额外的参数self指针来捕获this指针,然后在使用时将当前对象的指针传递给lambda表达式。这种方式非常繁琐且容易出错,也不符合C++ lambda表达式的简洁优雅的特点。

从C++11开始,我们可以直接在lambda表达式中使用this指针,例如:


class Foo {

public:

  void bar() {

    auto func = [this]() {

      // 使用this指针

      this->print();

    };

    func(); // 直接调用lambda表达式

  }

  void print() world!" << std::endl;

  

};

在lambda表达式中我们使用了[this]来捕获当前的this指针,因此可以直接在lambda表达式中使用当前对象的成员函数和成员变量,而无需通过额外的参数来传递this指针。这种方式简洁优雅,非常适合用于C++ lambda表达式中。

总之,C++ lambda表达式中捕获this指针的方式非常简单,只需要在lambda表达式中使用[this]即可,而不需要通过额外的参数来传递指针。这种方式非常方便且符合C++ lambda表达式的设计思想,可以大大提高代码的可读性和编码效率。

  
  

评论区

{{item['qq_nickname']}}
()
回复
回复