コールバックに使用するクラスを実装したいと考えてboost::signal
います。AddHandler()
他のオブジェクトは、およびRemoveHandler()
メソッドを使用してコールバック関数を登録できます。
ある SO の回答では、boost::signal::connection
から返されたオブジェクトを追跡することが提案されていますconnect()
が、別の回答では追跡しないことが提案されています。接続を管理する方法がわかりません。
connection
のみを持っている場合、後で切断するものをどのように調べることができslot_type
ますか?
class MyClass {
public:
typedef void Handler();
void AddHandler(const boost::signal<Handler>::slot_type& aHandler) {
mSignal.connect(aHandler);
}
void RemoveHandler(const boost::signal<Handler>::slot_type& aHandler) {
mSignal.disconnect(aHandler); // compiler error!
}
private:
boost::signal<Handler> mSignal;
};
発信者が次のようなことができるようにしたい:
MyObject lMyObject;
lMySignaler.AddHandler(boost::bind(&MyObject::OnEvent, lMyObject));
...
lMySignaler.RemoveHandler(boost::bind(&MyObject::OnEvent, lMyObject));