是否有一种优雅的方式来访问"这个"在传递给构造函数的lambda中?
这有效,但不优雅!
#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();
}
答案 0 :(得分:3)
您可以将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();
}
答案 1 :(得分:2)
您无法访问this
。您可以访问随机捕获的CbClass
对象,调用者将其排列为正在构建的对象。你不需要操纵任何指针。
int main() {
CbClass cb(13, [&cb]() { std::cout << cb.x_ << std::endl; });
cb.call();
}