是否有一种优雅的方式来访问传递给构造函数的 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/