======== Currying [TOC] ======== Lambda-Ausdrücke können auch als Ergebnis einer Funktion zurückgeliefert werden. Da der Typ unbekannt ist, geht dies nur mit `auto` als Return-Typ. Ebenso muss die Variable, die den Lambda-Ausdruck entgegennimmt, mit `auto` deklariert werden. Es gibt in `` den Algorithmus `std::find_if` mit dem in einer durch Iteratoren spezifizierten Objektmenge nach einem Objekt gesucht werden kann, das ein gegebenes Prädikat erfüllt. Angenommen, wir verwenden gerne Prädikate, die zwei Zeichenketten ohne Rücksicht auf die Klein- und Großschreibung miteinander vergleichen. Wenn das mehrfach zum Einsatz kommt, wäre eine Funktion nützlich, die eine zu suchende Zeichenkette erhält und dann ein Prädikat zurückliefert, das die zu suchende Zeichenkette mit einer anderen Zeichenkette vergleicht und dann einen entsprechenden `bool`-Wert zurückgibt. (Erledigen lässt sich das mit der Funktion `boost::iequals` aus `#include `.) Wenn ein Parameter in ein Funktionsobjekt verpackt wird, so dass anschließend ein Parameter weniger anzugeben ist, dann wird das als Currying bezeichnet. Folgendes Beispiel zeigt die Anwendung: :import: session06/step04/find0.cpp Fragen und Aufgabe ================== * Auf welche Weise sollte der Parameter _text_ in die _caption_ des Lambda-Ausdrucks aufgenommen werden, den `str_equivalence_ignore_case` zurückgibt? Als Kopie oder als Referenz? Ist beides möglich? Ist eine der Varianten bedenklich? Wenn ja, warum? * Sind Sie mit der Parameterdeklaration von `str_equivalence_ignore_case` glücklich oder würden Sie da gerne etwas verändern? Gibt es dann vielleicht eine andere Möglichkeit bezüglich der vorangehenden Frage? * Ergänzen und ggf. verändern Sie die Funktion entsprechend. :navigate: up -> doc:index back -> doc:session06/page06 next -> doc:session06/page08