c++ - sintaxis - ¿Pueden las funciones lambda ser recursivas?
lambdas java (1)
Posible duplicado:
Funciones lambda recursivas en c ++ 0x
Aquí hay una vieja función recursiva simple:
int fak(int n)
{
return (n <= 1) ? 1 : n * fak(n - 1);
}
¿Cómo escribiría una función tan recursiva como una función 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
¿Hay alguna expresión que denota la lambda actual para que pueda llamarse recursivamente?
Sí pueden. Puede almacenarlo en una variable y hacer referencia a esa variable (aunque no puede declarar el tipo de esa variable como auto
, tendría que usar un objeto std::function
lugar). Por ejemplo:
std::function<int (int)> factorial = [&] (int i)
{
return (i == 1) ? 1 : i * factorial(i - 1);
};
De lo contrario, no, no puedes referir this
puntero desde dentro del cuerpo de la lambda.