Pointer auf die Methode einer Instanz



  • Hallo,
    ich suche nun schon seid Tagen nach einer Möglichkeit mittels eines Zeigers auf eine Methode eines konkreten Objektes zu zugreifen.
    zum Thema Funktionspointer findet man zwar ne ganze Menge, aber das hat mir alles nicht weiter geholfen. Mein Problem ist halt, dass ich die Methode nicht auf static setzen kann, da in ihr Objektspezifische Sachen gemacht werden.

    Hier mal ein kleines Beispiel

    class test1
    {
    private:
    	int a;
    public:
    	void bla()
    	{
    	// verändere a irgentwie
    	// z.b.
    		a++;
    
    	}
    };
    
    class test2:public test1
    {
    public:
    	void func()
    	{
    		bla();
    	}
    };
    
    int main()
    {
    	test2* t=new test2();
    	void (*function)();	
    
    	//hier tritt nun das Problem auf
    	function=&t->func;
    	return 0;
    }
    

    wenn irgend jemand ne Idee hat wie ich das Problem lösen kann, wäre ich sehr dankbar. Bitte helft mir! 😃



  • void (test2::*function)();
    function=&test2::func;
    

    aufrufen musst du die methode aber immer mithilfe eines objektes!

    t->*function();//man beachte den *
    


  • Klasse, danke für die promte Anwort.

    Die übergabe des Zeigers scheint zu funzen, aber der aufruf über das Objekt macht noch Problem.

    t->*function();
    

    da haut mein g++ folgendes raus:

    test2.cpp:31: error: must use .* or ->* to call pointer-to-member function in `function (...)'

    komisch und ich dacht ich hätte das damit getan. hm, what ever.
    Das ist aber nicht so wichtig. Viel wichtiger ist, dass ich dummer weise die Anweisung in die Form

    void (*function)();
    

    bekomme muss. Der Hintergrund ist der, dass ich unter Linux ein Signalevent abfangen will, und der will den Funktionszeiger so haben.

    Hast du da ne Idee?



  • (t->*function)(); // Klammerung wichtig
    

    Ähm... wenn Du einen Funktionszeiger haben willst, kannst Du damit aber keine Methode aufrufen.



  • schau mal in die FAQ.
    Da steht wie das mit Methodenpointern geht...



  • Danke für eure Resonanz!

    Ich hab zwar nun ne Lösung meines kleinen Problems, aber so richtig gefällt mir das nicht, weil es irgendwie von hinten durch die Brust ins Auge geht. Meine Lösung arbeitet zum einen als seperater Thread und zwei C-Funktionen, und alles nur um einen Timer mit Eventmanagment zu erzeugen.
    Ich werde mal in der Linux-Sparte posten, ob es nicht ne direkte und vor allem saubere Möglichkeit eines Timers gibt.

    Trotzdem danke für Eure hilfen.


Anmelden zum Antworten