eventfunktion mit lamda oder aehnlich erstellen



  • hola leute

    kenn mich mit den lamdas und so noch nicht wirklich aus. hab nur basic wissen.
    folgendes will ich machen:
    habe ein class test

    class test
    {
       public:
          test(Parent &p) : parent(p) { }
          void ereignis(int e)
          {
             if(e == 1)
                mach_was(parent);
          }
    
          dyn_func mach_was(PARENT &p);
    
       private:
          Parent &parent;
    };
    

    jetzt will ich mach_was im konstructor oder sonst wo der parent klasse code zuteilen was er mnachen soll wenn ein bestimmtes ereignis auftritt.
    normalerweise mach ich das mit einer base-klasse von der ich dann ableite und dann den code reinschreibe. geht das irgendwie mit lamdas ? oder geht das anders besser ? ich hab da keinen plan wie ich das machen soll.
    das erstellen von neuen eventklassen ist einfach nur laesstig und zeitraubend.

    Meep Meep



  • Sofern ich dich richtig verstanden habe:

    class test
    {
       public:
          test(Parent &p, function<void(Parent& p)> f) : parent{p}, machwas{f} { }
          void ereignis(int e)
          {
             if(e == 1)
                mach_was(parent);
          }
       private:
          Parent &parent;
          function<void(Parent& p)> mach_was;
    };
    ...
    test t(p, [](Parent& p) {cout << "Macht jetzt was mit p: " << p.tolleFkt();})
    


  • hola

    ja ich denke das dies das ist was ich suche. werde ich dann gleich mal austesten.
    kann ich die lamda funktion auch ausserhalb des konstruktors mach_was zuweisen ? oder geht das nur mit dem konstruktor?

    Meep Meep



  • Klar, ganz normal

    class test
    {
    ...
        public:
          test(Parent &p)...
          function<void(Parent& p)> mach_was;
    };
    ...
    auto f = [](Parent& p) {cout << "Macht jetzt was mit p: " << p.tolleFkt();});
    test t(p);
    t.mach_was = f;
    


  • wie finde ich heraus ob mach_was eine lambda-funktion zugewiesen worden ist ?
    hab grad keine umgebung da, kann mich grad nicht selber rumspielen.
    ganz normal wie bei einem pointer ?

    ...
    void ereignis(int e)
    {
       if(e == 1 && mach_was != nullptr)
          mach_was(parent);
    }
    ...
    

    ?

    Meep Meep



  • Ja, genauso.


Anmelden zum Antworten