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 invoke nicht nocht die Signature aus Zeile 9 angegeben werden? Ich hätte mir noch vorstellen können auf das x und params (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)


Anmelden zum Antworten