Crear sus propias señales

Ahora que ha visto señales y manejadores de señales en gtkmm, tal vez quiera usar la misma técnica para permitir interacción entre sus propias clases. Eso es realmente muy simple usando la biblioteca libsigc++ directamente.

Esto no es un asunto único de gtkmm o de IGU. gtkmm usa libsigc++ para implementar sus envoltorios de proxy para el sistema de señales de GTK+, pero para las señales nuevas que no son de GTK+, puede crear señales de C++ puras, usando la plantilla sigc::signal<>.

Por ejemplo, para crear una señal que envíe 2 parámetros, un bool y un int, simplemente declare una sigc::signal, así:

sigc::signal<void, bool, int> signal_something;

También podría simplemente declarar esa señal como una variable miembro pública, pero algunas personas lo encuentran desastroso y prefieren hacerla disponible mediante un método de acceso, así:

class Server
{
public:
  //signal accessor:
  typedef sigc::signal<void, bool, int> type_signal_something;
  type_signal_something signal_something();

protected:
  type_signal_something m_signal_something;
};

Server::type_signal_something Server::signal_something()
{
  return m_signal_something;
}

Puede entonces conectar a la señal usando la misma sintaxis que usaba cuando conectaba a señales de gtkmm. Por ejemplo,

server.signal_something().connect(
  sigc::mem_fun(client, &Client::on_server_something) );