C++ c++;11访问“;这";从lambda传递到构造函数

C++ c++;11访问“;这";从lambda传递到构造函数,c++,c++11,lambda,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_; voi

在传递给构造函数的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();

}
#包括
#包括
类CbClass{
公众:
CbClass(intx,std::functioncb):x_x(x),cb_x(cb){}
int x_2;;
std::functioncb;
void call(){if(cb_)cb_();};
};
int main(){
CbClass*p(空PTR);
CbClass**pp&p;

CbClass cb(13,[pp](){std::cout x_p>您无法访问
。您可以访问随机捕获的
CbClass
对象,调用者将其安排为正在构造的对象。您不需要为此操作任何指针

int main() {
  CbClass cb(13, [&cb]() { std::cout << cb.x_ << std::endl; });
  cb.call();
}
intmain(){

CbClass cb(13,[&cb](){std::cout您无法访问
。您可以访问随机捕获的
CbClass
对象,调用者将其安排为正在构造的对象。您不需要为此操作任何指针

int main() {
  CbClass cb(13, [&cb]() { std::cout << cb.x_ << std::endl; });
  cb.call();
}
intmain(){

CbClass cb(13,[&cb](){std::cout您将在
调用
函数中将
这个
传递给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();
}
#包括
#包括
类CbClass{
公众:
CbClass(intx,std::functioncb:x(x),cb(cb){}
int x_2;;
函数cb;
void call(){if(cb_)cb_(this);};
};
int main(){

CbClass cb(13,[](CbClass*p){std::cout x_up>您将在
调用
函数中将
传递给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();
}
#包括
#包括
类CbClass{
公众:
CbClass(intx,std::functioncb:x(x),cb(cb){}
int x_2;;
函数cb;
void call(){if(cb_)cb_(this);};
};
int main(){

CbClass cb(13,[](CbClass*p){std::cout x_uu如果它工作,那么它不适合这个站点,如果它工作,那么它不适合这个站点,一个更好的地方应该是感谢,这更好,但是用g++4.8给出了一个警告:警告:变量“cb”在其自身初始化中使用时未初始化[-Wuninitialized]。在不关闭警告的情况下,如何解决此问题?请记住,如果您从此函数返回
cb
,这将非常糟糕。谢谢,这会更好,但会在g++4.8中给出警告:警告:变量“cb”在其自身初始化中使用时未初始化[-Wuninitialized].在不关闭警告的情况下,有没有办法解决这个问题?请记住,如果您从此函数返回
cb
,这将非常糟糕。