Lambda Funktion runde Klammern
-
Hallo, ich versuche gerade die Lambda Funktionen zu verstehen, jedoch hakts bei mir an der Parameterliste. Wenn ich sowas habe
std::vector<int> some_list; int total = 0; std::for_each(some_list.begin(), some_list.end(), [&total](int x) { total += x; });steht das int x ja für den Wert im vector oder?
Doch wenn ich sowas habestd::vector<MyClass> some_list; std::string total = 0; std::for_each(some_list.begin(), some_list.end(), [&total](int x, int y, std::string z) { total += x + y + z; });was ist dann x, y und z?
-
was ist dann x, y und z?
Das dürfte gar nicht kompileren, weil std::for_each dem Funktor (in diesem Fall die Lambda-Funktion) ein Objekt der Klasse MyClass übergibt.
-
Vielleicht hilft es Dir, wenn Du eine Implementierung von for_each siehst:
template<class Iter, class Func> Func for_each(Iter beg, Iter end, Func f) { while (beg!=end) { f(*beg); ++beg; } return f; }Und *beg ist in Deinem Fall ein Lvalue-Ausdruck vom Typ MyClass.