我正在使用这样的模式,C++11:
class FooViewController {
void build() {
auto label = ...
network->doWork([] (const Result& r) {
label->setText(r.text);
});
}
}
FooViewController 可能在doWork
完成之前解构,导致崩溃。看着 boost::signals2,我正在考虑使用boost::signals2::trackable
,它非常适合我的单线程用途,好处是我不必直接持有和管理我的连接,但是我不确定如何获得这样的使用 lambda 的解决方案。
这是一个可用的 lambda 免费版本:
class Foo : public boost::signals2::trackable {
public:
void bar() {
printf("Fire!");
}
};
Usage:
boost::signals2::signal<void()> signal;
{
Foo test;
signal.connect(boost::bind(&Foo::bar, &test));
signal();
}
signal();
Output:
Fired!
// Note a second 'Fired!' did not occur, which is correct behavior
两个目标:
1--我想做类似的事情:
signal.connect(boost::bind([] {
printf("Fired!");
}, &test));
test
在被拆除后不会调用 lambda 。
2--我不想直接管理.connect
.