I want to implement a class that uses boost::signal for callbacks. Other objects can register their callback functions using AddHandler() and RemoveHandler() methods.
In one SO answer it is suggested that we track the boost::signal::connection objects returned from connect(), but in another it is suggested that we don't! I'm not clear on how to manage the connections.
How would I be able to look up which connection to disconnect later when I only have the 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;
};
I want a caller to be able to do something like:
MyObject lMyObject;
lMySignaler.AddHandler(boost::bind(&MyObject::OnEvent, lMyObject));
...
lMySignaler.RemoveHandler(boost::bind(&MyObject::OnEvent, lMyObject));