Lambda Frage

Gast #6785326
Lesenswert?

Hi,

ich habe eine Frage bzgl. Lambdas und ob das was ich möchte überhaupt 
geht(ich habe nicht wirklich Erfahrung mit Lambdas und kapiere noch 
nicht wie ich das hinbekommen kann)

Bisher hätte ich ein Interface gemacht, von dem unterschiedliche 
Item-Klassen ableiten und dann jeweils eine do_action() Methode in jeder 
abgeleiteten Klasse ausimplementiert.

Nun dachte ich mir, es müßte irgendwie gehen, nur eine Klasse zu 
benutzen und dann jeweils eine action per Lambda zuzuweisen, in dem ich 
auch auf Item-Member zugreifen kann
1
#include <iostream>
2
#include <functional>
3

4
typedef  std::function<void(int)> Action;
5

6
class Item {
7

8
public:
9
    Item(Action act, int y)
10
        : action_(act), y_(y) {};
11

12
    void do_action(int x) { action_(x); }
13

14
private:
15
    Action action_;
16
    int y_;
17

18
};
19

20
int main()
21
{
22
    Action a([/*this*/](int x) {  std::cout << "Wert x:  " << x << "Wert y: " /*<< y_*/; });
23
   
24
    Item it1(a, 3);
25

26
    it1.do_action(5);
27
   
28
}

Ich möchte meiner Item Klasse variable Actions hinzufügen(per Lambda) 
und darin dann auf KlassenMember zugreifen. So wie ich es gemacht habe 
geht es offensichtlich nicht.
Wenn ich die Action der Item Klasse zuweise, kann ich dann nicht 
irgendwie per [this] Zugriff auf das Objekt erlangen, dem ich meine 
Action zuweise?

Kann mir jemand sagen wie ich das erreichen kann bzw. was ich falsch 
mache?

Danke für Hilfe!
Gast #6785379
Lesenswert?

Am einfachsten wäre es, wenn das Item der Action sich selbst als 
Parameter mit übergibt (1.cpp).

Oder ein Item anlegen und die Action später dranhängen, dann kann in der 
Action eine Referenz auf das Item gecapturet werden (2.cpp). Das ist 
aber schon in diesem Mickey-Maus-Beispiel völlig verwirrend.
Angehängte Dateien:
Gast #6786177
Lesenswert?

Tom schrieb:
> Am einfachsten wäre es, wenn das Item der Action sich selbst als
> Parameter mit übergibt (1.cpp).

Danke...das werde ich mal probieren.

Inwiefern die Lambdas das ganze übersichtlicher, einfacher & 
verständlicher machen hab ich aber noch Zweifel mittlerweile %-)
Gast #6791133
Lesenswert?

Ich würde auch eher denken, ich habe hier den Nagel zum Hammer gesucht.
Habe es jetzt mit Vererbung gemacht und das funktioniert wunderbar.

Habe an anderer Stelle aber auch Lambdas verwendet, und da macht es das 
Leben einfacher und auch klar verständlicher.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren