私はこのようなパターン、C++ 11 を使用しています:
class FooViewController {
void build() {
auto label = ...
network->doWork([] (const Result& r) {
label->setText(r.text);
});
}
}
FooViewController はdoWork
、完了する前に分解し、クラッシュを引き起こす可能性があります。boost::signals2 を見てboost::signals2::trackable
、シングル スレッドの目的に最適な を使用することを考えています。これは、接続を直接保持および管理する必要がないという利点がありますが、そのようなものを取得する方法がわかりませんラムダで動作するソリューション。
これは、動作するラムダフリーバージョンです:
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
2 つの目標:
1-- 私は次のようなことをしたいと思います:
signal.connect(boost::bind([] {
printf("Fired!");
}, &test));
test
取り壊された後にラムダを呼び出すことはありません。
2-- から返された接続オブジェクトを直接管理したくありません.connect
。