Как предотвратить удаление слотов от определенного сигнала?

Можно ли заблокировать удаление определенных слотов из сигнала в библиотеке boost.signals?
Если так, то как должен выглядеть код, который выполняет такие функции? Нужно ли создавать производный класс только для этого конкретного сигнала?

1 ответ

Решение

Предоставьте свою собственную функцию соединения слотов, которая не может вернуть соединение. Без связи клиент не может разорвать его.

Изменить: пример кода:

struct my_class
{
  boost::signals::connection listen_event1(boost::function<void (my_class const&)> const& f)
  {
    return signal1.connect(f);
  }
  void listen_event2(boost::function<void my_class const&)> const& f)
  {
    signal2.connect(f);
  }

private:
  typedef boost::signals::signal<void(my_class const&)> sig_t;
  sig_t signal1;
  sig_t signal2;
};

соединения signal2 не могут быть отключены.

Другие вопросы по тегам