Posible duplicado:
funciones lambda recursivas en c++0x
Aquí hay una función recursiva simple y antigua:
int fak(int n)
{
return (n <= 1) ? 1 : n * fak(n - 1);
}
¿Cómo escribiría una función 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 denote la lambda actual para que pueda llamarse a sí misma recursivamente?
Respuestas:1 Respuesta 1
Tiempo:hace 9 años, 7 meses
Última modificación:hace 2 meses
Solución
Sí, pueden. A partir de C++23 puede usar el parámetro explícito:
auto factorial = [](this auto self, int i)
{
return (i == 1) ? 1 : i * self(i - 1);
};
Con los estándares anteriores de C++, puede almacenar la lambda en una variable y hacer referencia a esa variable (aunque no puede declarar el tipo de esa variable como , tendría que usar un objeto en su lugar). Por ejemplo:auto
std::function
std::function<int (int)> factorial = [&] (int i)
{
return (i == 1) ? 1 : i * factorial(i - 1);
};