2

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

1 回答 1

0

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

于 2013-06-26T20:37:30.543 回答