Kan jeg definere en C++ lambda-funktion uden auto?

Kan jeg definere en C++ lambda-funktion uden auto?

Du bruger std::function , som kan glob enhver lambda eller funktion pointer.

std::function< bool(int, int) > myFunc = []( int x, int y ){ return x > y; };

Se C++-reference.


Du kan bruge std::function , men hvis det ikke skal være effektivt nok, kan du skrive et funktionsobjekt, der ligner det, lambdaer gør bag kulisserne:

auto compare = [] (int i1, int i2) { return i1*2 > i2; }

er næsten det samme som

struct Functor {
    bool operator()(int i1, int i2) const { return i1*2 > i2; }
};
Functor compare;

Hvis funktoren skal fange en variabel i konteksten (f.eks. "denne"-markøren), skal du tilføje medlemmer inde i funktoren og initialisere dem i konstruktøren:

auto foo = [this] (int i) { return this->bar(i); }

er næsten det samme som

struct Functor {
    Object *that;
    Functor(Object *that) : that(that) {}
    void operator()(int i) const { return that->bar(i); }
};
Functor foo(this);