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 habe

    std::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.


Anmelden zum Antworten