Zeiger auf Methoden eines Objekts. Wie geht das?



  • Hallo zusammen,

    ich versuche, eine Funktion, die in einem Objekt existiert in einen Zeiger zu speicher und dann vor außerhalb des Objektes aufzurufen. Wie mach ich das?
    Ich weiß, wie ich normale Zeiger auf Funktionen erzeuge und verwende, aber mit Objekten klappts nicht.

    Danke für die Hilfe,

    viele Grüße,

    Matthias



  • fehlersucher schrieb:

    Hallo zusammen,

    ich versuche, eine Funktion, die in einem Objekt existiert in einen Zeiger zu speicher und dann vor außerhalb des Objektes aufzurufen. Wie mach ich das?
    Ich weiß, wie ich normale Zeiger auf Funktionen erzeuge und verwende, aber mit Objekten klappts nicht.

    Danke für die Hilfe,

    viele Grüße,

    Matthias

    Im Zusammenhang mit Klassen ist die Handhabung ein wenig anders:

    Beispiel Zeiger auf ein Objekt einer Klasse foo:

    struct foo
    {
       string obj;
    };
    
    int main()
    {
       string foo::*element_ptr; // Deklaration
    
       foo bar; // objekt erzeugen, auf dessen Element obj element_ptr später zeigen soll
    
       element_ptr = &bar::obj; // Zuweisung
    
       bar.*element_ptr; // Dereferenzierung.
       ...
    }
    

    Beispiel: Zeiger auf eine Methode von foo

    struct foo
    {
       void method();
    };
    
    int main()
    {
       void (foo::*method_ptr)(); // Deklaration
    
       foo bar; // objekt erzeugen, auf dessen Methode method() method_ptr später zeigen soll
    
       method_ptr = &bar::method; // Zuweisung
    
       bar.*method_ptr; // Dereferenzierung.
       ...
    }
    

    Gruß Caipi



  • non-static Funktionen? Dann brauchst du natürlich ein Objekt um sie aufrufen zu können.

    ReturnType (ClassType::*the_method_pointer)( /* ParamTypes */ ) = &ClassType::someMethod;
    ClassType ct;
    (ct.*the_method_pointer)( /* params? */ );
    ClassType* pct = &ct;
    (pct->*the_method_pointer)( /* params? */ );
    
    // meist uebersichtlicher:
    typedef ReturnType (ClassType::*MethodPointerType)( /* ParamTypes */ );
    MethodPointerType the_method_pointer = &ClassType::someMethod;
    
    // und die Boardsuche duerfte auch _einiges_ zu Tage foerdern...
    


  • Hey, vielen Dank für den Crashkurs - jetzt scheints zu gehen 🙂
    👍


Anmelden zum Antworten