14 Aralık 2017 Perşembe

signals2 scoped_connection Sınıfı

Giriş
Şu satırı dahil ederiz.
#include <boost/signals2.hpp>
Bu sınıf signals2::connection nesnesinden kalıtır.

Constructor
Şöyle yaparız.
typedef boost::function<void(int)> Signal_f;


using boost::signals2::scoped_connection;

boost::signals2::signal< void(int) > my_signal;
Signal_f functor = ...;
std::cout << "Created signal, and it has "
          << my_signal.num_slots() << " subscribers." << std::endl;

// the scoped_connection object is RAII
auto con = scoped_connection(my_signal.connect(functor));
disconnect metodu
Şöyle yaparız.
// disconnect the connection object, not the signal
con.disconnect();
Örnek
signal ve scoped_connection aynı sınıfın üyesi yapılırsa nesne yok olurken signal ve slot otomatik ayrılır. Elimizde şöyle bir kod olsun.
class foo {
public:
  template <class F>
  boost::signals2::scoped_connection register_callback(F&& f) {
    return signal.connect(std::forward<F>(f));
  }

  void trigger() {
    signal();
  }

private:
  boost::signals2::signal<void()> signal;
};
Şöyle yaparız.
class bar {
public:
  bar() {
    connection = foo.register_callback([this] { myhandler(); });
  }
  void myhandler() {
    ...
  }

private:
  boost::signals2::scoped_connection connection;
};

Hiç yorum yok:

Yorum Gönder