Zeiger auf einen Funktionszeiger im Konstruktor initialisieren.



  • Hallo Leute,

    ich habe folgenden Funktionszeiger:

    typedef void(p1::f1::*updateFunction)(Event&);
    

    und folgende Klassenmembervariable:

    updateFunction *UpdateFunctionA;
    

    Zur Laufzeit kann ich den Zeiger auf andere Zeiger verweisen oder konkrete Funktionen zuordnen:

    *UpdateFunctionA &p1::f1::UpdateMe;
    

    Da ich den Zeiger beim Start bis er er benötigt wird nicht leer stehen lassen will, möchte ich Diesen im Konstruktor mit einer Void (nichtstun) Funktion belegen. Gibt es da eine Syntax wie:

    Klasse::Klasse( ... )
    :[b]*[/b]UpdateFunctionA(&p1::f1::UpdateVoid), ...
    

    oder muss man solche Sachen immer im Rumpf machen?



  • also du kannst auf jeden fall den zeiger mit nullptr belegen
    aber wenn du den jetzt dereferenzierst, also aufrufst, implodiert das universum...

    rein theoretisch kannst du dir eine dummy funktion schreiben die nichts macht und den damit initialisieren



  • Skym0sh0 schrieb:

    rein theoretisch kannst du dir eine dummy funktion schreiben die nichts macht und den damit initialisieren

    Das habe ich ja, aber wie ist die Syntax im Konstruktorrumpf?



  • mh gute frage

    wenn ich das richtig sehe zeigt der zeiger auf eine methode einer anderen klasse?
    da müsstes du casten glaube ich. ich hab noch nie delegates gross verwendet, habs immer umgangen

    denke du kannst dafür auch boost::bind oder function nehmen
    sicher bin ich mir da aber auch nicht da ich sie nur vom hören sagen kenne...
    kannst ja mal gucken



  • Skym0sh0 schrieb:

    wenn ich das richtig sehe zeigt der zeiger auf eine methode einer anderen klasse?

    Es geht um Methoden aus der gleichen Klasse mit gleicher Signatur.



  • class Foo
    {
    public:
        Foo()
         : func(&Foo::func)
        {}
    
    private:
       void (Foo::*function)(void);
    
       void func(void) {}
    };
    

    sofern ich mich nicht vertippt hab sollte das gehen
    habs grad mit vs c++ 2010 pro getestet...



  • Skym0sh0 schrieb:

    class Foo
    {
    public:
        Foo()
         : func(&Foo::func)
        {}
    
    private:
       void (Foo::*function)(void);
    
       void func(void) {}
    };
    

    sofern ich mich nicht vertippt hab sollte das gehen
    habs grad mit vs c++ 2010 pro getestet...

    Super danke, werde gleich mal probieren.



  • Du meinst wohl eher

    Foo()
     : function(&Foo::func)
    {}
    

    😉



  • ups ja
    kleiner tippfehler 😉


Log in to reply