Me pregunto si es posible escribir una función que devuelva una función lambda en C++ 11. Por supuesto, un problema es cómo declarar tal función. Cada lambda tiene un tipo, pero ese tipo no se puede expresar en C++. No creo que esto funcionaría:Función que devuelve una expresión lambda
auto retFun() -> decltype ([](int x) -> int)
{
return [](int x) { return x; }
}
Tampoco esto:
int(int) retFun();
No estoy al tanto de las conversiones automáticas de lambdas a, digamos, punteros a funciones, o algo así. ¿Es la única solución que elabora a mano un objeto de función y lo devuelve?
Para agregar lo que ya se ha dicho, las funciones lambda sin estado son convertibles a punteros a función. –
IMO su primera opción no funcionará porque la lambda en el 'decltype' no es la misma que en el cuerpo de la función y por lo tanto tiene un tipo diferente (incluso si incluyó la declaración de devolución) – Motti
Por cierto, si un lambda tiene una cláusula de captura vacía, puede convertirse implícitamente en un puntero a función. – GManNickG