Wieder mal Functionpointer



  • Hallo Leuts,

    ich habe folgendes Problem:
    Ich möchte gerne innerhalb einer Memberfunktion einer Klasse einen Funktionszeiger auf eine andere Memberfunktion dieser Klasse erzeugen.

    Ich habe das in etwa so gemacht.

    class A
    {
    public:
        A();
        ~A();
        void ErsteMethode();
        void* ZweiteMethod(void*);
    };
    
    void A::ErsteMethode()
    {
        // blabla ...
        void* (*pFunc)(void*) = &ZweiteMethode;           // geht nicht
        void* (*pFunc)(void*) = &A::ZweiteMethode;        // geht auch nicht
        void* (*pFunc)(void*) = (this->ZweiteMethode)(0); // geht auch nicht
    }
    

    jetzt bin ich mit meinem Latein am Ende. Vielleicht hat ja von euch noch jemand eine Idee.

    Gruß Mea



  • In etwa so:

    void A::ErsteMethode()
    {
    	// Deklaration
    	void* (A::*fp)(void*) = &A::ZweiteMethode;
    	// Aufruf
    	void* returnvalue = (*this.*fp)(NULL);
    }
    

    Ein Methodenpointer ist nicht an ein Objekt gebunden, sondern erst beim Aufruf der Methode bestimmst du von welchem Objekt die Methode aufgerufen werden soll (hier ist es einfach this).

    http://www.newty.de/fpt/index.html

    edit: HAHAHA erster 🙂



  • void *(A::*p)(void*)=A::ZweiteMethode;
    


  • class A 
    { 
    public: 
        A(); 
        ~A(); 
        void ErsteMethode(); 
        void* ZweiteMethode(void*); 
    }; 
    
    void* A::ZweiteMethode(void*)
    {
        return 0;
    }    
    
    void A::ErsteMethode() 
    { 
        // blabla ... 
        void* (A::*pFunc)(void*) = &A::ZweiteMethode;  // geht 
    }
    

Anmelden zum Antworten