如何保存boost :: signal :: connections以便以后断开连接?

时间:2013-06-26 19:14:17

标签: boost-signals

我想实现一个使用boost::signal进行回调的类。其他对象可以使用AddHandler()RemoveHandler()方法注册其回调函数。

one SO answer中建议我们跟踪从boost::signal::connection返回的connect()个对象,但in another建议我们不要这样做!我不清楚如何管理连接。

当我只有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));

1 个答案:

答案 0 :(得分:0)

我没有使用const boost::signal<Handler>::slot_type&作为我的参数类型,而是将它们更改为函数指针。然后我使用函数指针作为std::map中的键来跟踪boost::signals::connection。调用RemoveHandler时,我刚刚在连接上调用了disconnect并删除了地图中的条目。