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 testclass 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.