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_CALLBACKin 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_listvorliegen 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?