Double Possible:
Récursive lambda fonctions en c++0xVoici une bonne vieille fonction récursive:
int fak(int n) { return (n <= 1) ? 1 : n * fak(n - 1); }
Comment pourrais-je écrire une telle 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
Est-il une expression qui désigne le courant lambda de sorte qu'il peut s'appeler lui-même de manière récursive?
Réponse
Trop de publicités?Oui, ils le peuvent. Vous pouvez le stocker dans une variable de référence et que la variable (bien que vous ne pouvez pas déclarer le type de la variable auto
, vous auriez à utiliser une 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 consulter l' this
du pointeur à l'intérieur du corps de la lambda.