82 votes

Les fonctions lambda peuvent-elles être récursives?

Double Possible:
Récursive lambda fonctions en c++0x

Voici 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?

111voto

Andy Prowl Points 62121

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.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X