我想实现一个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));