PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : [GTKmm] Signal erstellen und auslösen



styz
06-09-2005, 20:49
Hi,

also ich verstehe nicht so recht wie das bei GTKmm mit der Signalerstellung funktioniert.

Nach der Doku erstelle ich (unsauber) ein Signal in dem ich eine Methode deklariere:


sigc::signal<Rückgabewert, Parameter 1, Parameter 2, Parameter n> signal_foo;


Wenn ich nun aber eben dieses Signal (so wie in der libsigc++ beschrieben) auslösen will durch einen Aufruf von


signal_foo(Parameter 1, Parameter 2, Parameter n);


dann kennt der Compiler ja zur Übersetzungszeit nicht die Methode signal_foo() und ich bekomme dementsprechend einen Fehler gemeldet.

Solange das Signal keine Parameter hat klappt noch alles mit einem singal_foo.emit().. doch geht das eben nicht wenn ich Parameter übergeben muss.

Wo liegt der Fehler?
Ich bin weder in der GTKmm noch in der spärrlichen libsigc++ Dokumentation fündig geworden.


mfg

BeS
06-09-2005, 21:45
Hier mal ein kleines Beispiel aus der Doku, sollte eigentlich funktionieren:



#include <iostream>
#include <string>

#include <sigc++/sigc++.h>

void on_print(const std::string& str)
{
std::cout << str;
}

int main()
{
sigc::signal<void, const std::string&> signal_print;

signal_print.connect( sigc::ptr_fun(&on_print) );

signal_print.emit("hello world\n");

return 0;
}

styz
07-09-2005, 14:48
Hi,

alles klar so funktioniert es natürlich.
Hatte mich an diese (http://libsigc.sourceforge.net/libsigc2/docs/manual/html/ch03.html) Seite gehalten.

Stammt das Beispiel aus der gleichen Doku? Konnte es dort nicht finden.

mfg

BeS
07-09-2005, 20:09
Stammt das Beispiel aus der gleichen Doku? Konnte es dort nicht finden.


nein, ich habe es aus der Doku die es bei Debian im Paket libsigc++-2.0-doc gibt.
Da gibt es zwei Beispiele, dass das ich hier gepostet habe und noch ein etwas größeres, welches auch mit Klassen arbeitet.

styz
08-09-2005, 10:08
Alles klar. Danke

mfg