Funktionspointer



  • http://www.c-plusplus.net/forum/viewtopic.php?t=59556&highlight=prozessoroptimierte+funktionen

    Hab was hier gefunden. Doch bei mir funktioniert es nicht.

    Ich habe zwei Methoden in einer Funktion. Je nach dem will ich einen Zeiger auf die Funktionen setzen.

    class
    ....
    bool funktionA(int);
    bool funktionB(int);

    bool(*funktion)(int);
    ...};

    Be mir kommt der Fehler type cast' : '' kann nicht in 'bool (__cdecl *)(int)' konvertiert werden



  • class HatDieAuchNenNamen {
      ....
      bool funktionA(int);
      bool funktionB(int);
    
      bool (HatDieAuchNenNamen::* funktion)(int);
    };
    ...
    funktion = &funktionA; // der & Operator ist hier, im Unterschied zu freien Funktionen, Pflicht
    

    Das nennt sich Memberzeiger oder Methodenzeiger, falls du dich in der Richtung weiter informieren willst.


  • Mod



  • Bashar schrieb:

    class HatDieAuchNenNamen {
      ....
      bool funktionA(int);
      bool funktionB(int);
    
      bool (HatDieAuchNenNamen::* funktion)(int);
    };
    ...
    funktion = &funktionA; // der & Operator ist hier, im Unterschied zu freien Funktionen, Pflicht
    

    Das nennt sich Memberzeiger oder Methodenzeiger, falls du dich in der Richtung weiter informieren willst.

    Also das mit dem & Operator geht nicht. Der COmpiler meint Ungueltige Operation auf Ausdruck einer gebundenen Member-Funktion.

    Und wenn ich es ohne & mache geht es.

    Diesmal meint er aber, wenn ich versuche mit classe->funktion(int) auf die Methode zu zugreifen, das der Ausdruck keine Funktion ergibt.



  • peterchen2 schrieb:

    Also das mit dem & Operator geht nicht. Der COmpiler meint Ungueltige Operation auf Ausdruck einer gebundenen Member-Funktion.

    Sorry, das geht auf meine Kappe. Du musst die Klasse auch dazusagen, wenn die Operation im Inneren dieser Klasse stattfindet:

    funktion = &HatDieAuchNenNamen::funktionA;
    

    Und wenn ich es ohne & mache geht es.

    Dürfte eigentlich nicht.

    Diesmal meint er aber, wenn ich versuche mit classe->funktion(int) auf die Methode zu zugreifen, das der Ausdruck keine Funktion ergibt.

    Logisch. Ist ja auch keine, das ist ein Methodenzeiger. Der muss auf eine Instanz der Klasse angewendet werden:

    (classe->*(classe->funktion))(42);
    


  • danke 😃 👍


Anmelden zum Antworten