Bereichsoperator: Funktion ohne Signatur
-
Hallo ihr Lieben,
ich bin bin in diesem Stack Overflow Eintrag auf folgendes Template gestoßen:
template< typename F > class gsl_function_pp : public gsl_function { public: gsl_function_pp(const F& func) : _func(func) { function = &gsl_function_pp::invoke; params=this; } private: const F& _func; static double invoke(double x, void *params) { return static_cast<gsl_function_pp*>(params)->_func(x); } };Dabei wundert mich Zeile 4: Warum muss bei dem
invokenicht nocht die Signature aus Zeile 9 angegeben werden? Ich hätte mir noch vorstellen können auf dasxundparams(also den Bezeichner?) zu verzichten, aber so ganze ohne Signatur?Gruß,
-- Klaus.
-
Sofern die Funktion nicht überladen ist, ist das eindeutig. Das Feature stammt noch aus C, wo es keine Überladungen gibt, dann macht es umgekehrt keinen Sinn, die Parametertypen anzugeben.
-
In zeile 4 wird ein adresse auf die funktion in der Variable "function" gespeichert. (Sichwort: Funktionszeiger)
Und dafür braucht man die Parameterliste nicht.
-
Okay,
vielen Dank.
Aber der Compiler würde auch das Angeben der Signatur verstehen?
Gruß,
-- Klaus.
-
Nein.
(ausser du meinst mit "Signatur angeben" "zum entsprechenden Funktionszeiger casten" -- aber Parameterlisten sind syntaktisch falsch)