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!