Δημιουργία των σημάτων σας.

Τώρα που έχετε δει σήματα και χειριστές σήματος στην gtkmm, μπορεί να σας αρέσει να χρησιμοποιήσετε την ίδια τεχνική για να επιτρέψετε την αλληλεπίδραση μεταξύ των δικών σας κλάσεων. Αυτό είναι στην πραγματικότητα πολύ απλό χρησιμοποιώντας την βιβλιοθήκη libsigc++ άμεσα.

Αυτό δεν είναι καθαρά μια gtkmm ή ένα θέμα γραφικής διεπαφής χρήστη. Η gtkmm χρησιμοποιεί την libsigc++ για να υλοποιήσει τους συσκευαστές μεσολαβητή για το σύστημα σήματος GTK+, αλλά για νέα, μη GTK+ σήματα, μπορείτε να δημιουργήσετε καθαρά σήματα C++, χρησιμοποιώντας το πρότυπο sigc::signal<>.

For instance, to create a signal that sends 2 parameters, a bool and an int, just declare a sigc::signal, like so:

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

You could just declare that signal as a public member variable, but some people find that distasteful and prefer to make it available via an accessor method, like so:

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;
}

You can then connect to the signal using the same syntax used when connecting to gtkmm signals. For instance,

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