Как сохранить boost::signal::connections для последующего отключения?
Я хочу реализовать класс, который использует 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));
1 ответ
Вместо того, чтобы использовать const boost::signal<Handler>::slot_type&
в качестве типа моего параметра я изменил их на указатели функций. Затем я использовал указатели функций в качестве ключей в std::map
отслеживать boost::signals::connection
s. Когда RemoveHandler
называется я только что позвонил disconnect
на связи и сотри запись на карте.