Signale verbinden und auslösen wie Glib
-
Hi!
Ich versuch schon ne ganze Weile dahinter zu steigen, wie Glib Signale verbinden und auslösen kann, aber der Source-Code ist irgendwie verdammt schlecht kommentiert.
An
g_signal_connect ()
übergibt man ja einen Funktionszeiger (der durch das MakroG_CALLBACK
in die Formvoid (*) (void)
umgewandelt wird) auf eine Funktion, deren Signatur mit dem Signal übereinstimmen muss.
Beig_signal_emit ()
übergibt man dann beliebig viele Argumente, die ebenfalls mit der Signatur der Funktion übereinstimmen müssen.Wie schafft es jetzt
g_signal_connect ()
zu überprüfen, ob die Signatur stimmt, und wie schafft esg_signal_emit ()
die Parameter, die es übergeben bekommt (und dann ja nur alsva_list
vorliegen hat) so weiterzugeben, dass am Ende die Funktion, zu der man den Funktionszeiger ang_signal_connect ()
angegeben hat, auch wieder aufgerufen werden kann? Werden da die ganzen Parameter wieder einzeln irgendwie auf den Stack gepusht und anschließend die Funktion aufgerufen?