Duplicata possible:
Fonctions lambda récursives en c ++ 0x
Voici une ancienne fonction récursive simple:
int fak(int n)
{
return (n <= 1) ? 1 : n * fak(n - 1);
}
Comment pourrais-je écrire une fonction récursive comme une fonction lambda?
[](int n) { return (n <= 1) ? 1 : n * operator()(n - 1); }
// error: operator() not defined
[](int n) { return (n <= 1) ? 1 : n * (*this)(n - 1); }
// error: this wasn't captured for this lambda function
Y a-t-il une expression qui dénote le lambda actuel afin qu'il puisse s'appeler récursivement?
Oui, ils peuvent. Vous pouvez le stocker dans une variable et référencer cette variable (bien que vous ne puissiez pas déclarer le type de cette variable comme auto
, vous devrez utiliser un std::function
objet à la place). Par exemple:
std::function<int (int)> factorial = [&] (int i)
{
return (i == 1) ? 1 : i * factorial(i - 1);
};
Sinon, non, vous ne pouvez pas référencer le pointeur this
depuis l'intérieur du corps du lambda.