c++11 从传递给构造函数的 lambda 访问 "this"

标签 c++ c++11 lambda

是否有一种优雅的方式来访问传递给构造函数的 lambda 中的“this”?

这可行,但不够优雅!

#include <iostream>
#include <functional>

class CbClass {
 public:
  CbClass(int x, std::function< void() > cb) : x_(x),cb_(cb) {}
  int x_;
  std::function< void() > cb_;
  void call() { if (cb_) cb_(); };
};

int main() {

  CbClass* p(nullptr);
  CbClass** pp(&p);
  CbClass cb( 13 , [pp] () { std::cout << (*pp)->x_ << std::endl; } );
  p = &cb;

  cb.call();

}

最佳答案

您可以将 this 传递给 call 函数中的 lambda:

#include <iostream>
#include <functional>

class CbClass {
public:
    CbClass(int x, std::function< void( CbClass * ) > cb) : x_(x),cb_(cb) {}
    int x_;
    std::function< void( CbClass * ) > cb_;
    void call() { if (cb_) cb_( this ); };
};

int main() {
   CbClass cb( 13 , [] ( CbClass *p ) { std::cout << p->x_ << std::endl; } );
   cb.call();
}

关于c++11 从传递给构造函数的 lambda 访问 "this",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24827648/

相关文章:

c++ - 如何找到结构字段占用的空间以及它与下一个字段之间的填充?

c++ - 在运行时创建具有唯一函数指针的函数

c++ - +=、|=、&= 等是原子的吗?

c++ - C/C++ 中的类型转换到底是什么?

c++ - 使用 NSOpenGLView 进行线程渲染

c++ - 为什么对 vector 中类成员的引用指向不同对象的相同值?

c++ - 在使用中删除 boost 功能

c++ - 将可变函数指针分配给 std::function

Common Lisp 中的 Haskell 样式部分

java - 在 lambda 中使用类字段