Xavier Lamorlette
Sommaire :
[]
construct inside a function call's argument list indicates the beginning of a lambda expression:
[capture](parameters) -> return-type {body}
Capture of variables from local scope:
[]
: nothing[=]
: everything by value (copy)[&]
: everything by reference[=, &x]
: capture everything by value but one variable by reference[&, =x]
: capture everything by reference but one variable by value[&x, y]
: specific symbolsThe return type is optional if the compiler can deduce it unambiguously.
std::function<int(int)> foo = [](int a){return a * a;};
Au lieu de :
Parameter parameter;
std::vector<A> as;
std::copy_if(as.begin(), as.end(), std::back_inserter(as),
[& parameter](const A & a) {
[…]
return result;
});
on peut écrire :
auto predicate(const Parameter & parameter) {
return [& parameter](const A & a) {
[…]
return result;
});
}
Parameter parameter;
std::vector<A> as;
std::copy_if(as.begin(), as.end(), std::back_inserter(as), predicate(parameter));
class A {
int foo;
auto get_foo_getter() {
return [this]() {
return foo;
};
}
};
{
A a;
auto lambda = a.get_foo_getter();
lambda();
}
class A {
int foo;
auto get_foo_getter() {
return [*this]() {
return foo;
};
}
};
{
auto lambda = A{}.get_foo_getter();
lambda();
}
Permet de simuler une lambda polymorphe :
struct get_foo {
template <typename T>
const string & operator() (const T & x) const {
return x.foo;
}
};
auto foo = []<typename T>(const std::vector<T> & vector_of_stuff) {
…
};
La dernière mise à jour de cette page date de décembre 2021.
Le contenu de ce site est, en tant qu'œuvre originale de l'esprit, protégé par le droit d'auteur.
Pour tout commentaire, vous pouvez m'écrire à xavier.lamorlette@gmail.com.