#include <vector>
#include <algorithm>
void foo(int)
{
}
int main()
{
std::vector<int> v({ 1,2,3 });
std::for_each(v.begin(), v.end(), [](auto it) { foo(it+5); });
}
cuando se compila, el ejemplo anterior se inicia la salida de error como este:El uso de automóviles en una función lambda
h4.cpp: In function 'int main()':
h4.cpp:13:47: error: parameter declared 'auto'
h4.cpp: In lambda function:
h4.cpp:13:59: error: 'it' was not declared in this scope
¿Quiere decir que la palabra clave auto
no debe utilizarse en las expresiones lambda?
Esto funciona:
std::for_each(v.begin(), v.end(), [](int it) { foo(it+5); });
Por qué la versión con la palabra clave automático no funciona?
Creo que incluso si se trata de una lambda, que todavía funcionan como una función, y debe tener una firma. Con el auto, deja que el compilador decida el tipo, por lo que su lambda no tiene una firma real hasta el tiempo de compilación. – Geoffroy
Realmente necesitamos lambdas polimórficos (plantillas implícitas AKA) en el próximo estándar. Esta pregunta es solo una de varias instancias donde la gente simplemente asume que 'auto' funciona de esta manera. No veo ninguna razón por la que no debería. –
deft_code, estoy contigo.Es un caso de uso lógico para auto. – Robert