================================== Lambda-Ausdrücke mit einer Capture [TOC] ================================== Wenn wir Lambda-Ausdrücke mit einem internen Status wie beim Prädikat _IsIncreasing_ wünschen, muss die entsprechende Variable in die _capture_ aufgenommen werden. Wie lässt sich nun die Verwendung von _IsIncreasing_ durch einen Lambda-Ausdruck ersetzen? Dazu gibt es zwei Ansätze: * Wir deklarieren eine entsprechende lokale Variable außerhalb des Lambda-Ausdrucks in dem umgebenden Block und übernehmen diese per Referenz. * Beginnend mit C++14 ist es möglich, in der _capture_ eine Initialisierung zu verwenden. Beide Techniken können wir zunächst einsetzen, um das Array mit den Werten 1 bis 100 zu initialisieren. Hier ist die erste Variante: :import: session06/step03/init-numbers.cpp ---- SHELL (path=session06/step03,hostname=theon) -------- g++ -Wall -o init-numbers init-numbers.cpp ./init-numbers ---------------------------------------------------------- So könnte im ersten Ansatz die zweite Variante aussehen: :import: session06/step03/init-numbers2.cpp ---- SHELL (path=session06/step03,hostname=theon) -------- g++ -Wall -o init-numbers2 init-numbers2.cpp ---------------------------------------------------------- Frage und Aufgabe ================= * Ersetzen Sie _IsIncreasing_ durch einen Lambda-Ausdruck entsprechend der ersten Variante. * Weswegen scheitert die zweite Variante? Vorlage ======= :import: session06/step01/select-increasing.cpp [fold] :navigate: up -> doc:index back -> doc:session06/page04 next -> doc:session06/page06