Eigenes libsigc++ Signal in 2 Klassen verwenden



  • Hallo zusammen,

    ich arbeite mich gerade ein wenig in Signalverarbeitung mit libsigc++ ein und möchte ein eigenes Signal definieren, dieses in einer Methode Klasse A auslösen und die Behandlung mit einer handler-Funktion in einer anderen Klasse B verbinden. Zur libsigc++ gibt es ja unter http://library.gnome.org/devel/libsigc++-tutorial/stable/index.html prinzipiell ein gutes Tuturial. Das Problem ist jedoch, dass ich nicht weiß wie ich den Klassen A und B mein selbst definiertes Signal zur Verfügung stellen soll und das Tutorial leider nicht auf solche Fälle eingeht. Ich hatte spontan an eine Header-Datei gedacht, die ich in den Klassen A und B inkludiere und die lediglich "sigc::signal<void, std::string, std::string> mySignal;" enthält. Das funktioniert jedoch nicht, weil dann in jeder Klasse die Variable neu definiert wird...
    Ich hoffe es wird deutlich was ich vorhabe und mir kann hier jemand vielleicht dabei helfen. 🙂

    Vielen Dank!



  • Freund Googel hat die Antwort schnell gefunden... http://wiki.inkscape.org/wiki/index.php/Using_libsigc%2B%2B_signals



  • Hmm, der Eintrag löst mein Problem nicht wirklich bzw. ich hoffe, dass es eine andere Lösung gibt. In dem Eintrag wird der Klasse Receiver eine Referenz auf die Klasse Emitter übergeben in der das Signal definiert ist. Ich würde diese Referenzübergabe gerne vermeiden und das Signal zentral definieren. Die Signale, die bei gtkmm zum Beispiel verwendet werden müssen ja auch irgendwo definiert sein und können verwendet werden, ohne dass eine Referenz benötigt wird.



  • Du mußt doch nur das Signal in der Klasse A definieren und von B aus darauf zugreifen (so daß B dann A kennt, aber nicht umgekehrt).
    Und wenn es ein klassenbezogenes Signal ist (anstatt ein objektbezogenes), dann zusätzlich als 'static' deklarieren (und in der zugehörigen Implementationsdatei noch mal definieren).


Anmelden zum Antworten