He estado leyendo un poco sobre expresiones lambda en Internet recientemente y me parece que las expresiones lambda de C++ 0x no tendrán un solo tipo (o tipos) que se unirá exclusivamente a expresiones lambda - en otras palabras , las expresiones lambda solo coincidirán con argumentos de plantilla o argumentos/variables auto
. Lo que sucede, como se describe here, es que¿Es malo que las expresiones lambda de C++ 0x no tengan un tipo con nombre?
compiladores que apoyan lambdas se crear una única funtor tipo anónimo para cada expresión lambda
Mi pregunta es, ¿es malo? ¿No tendría sentido tener alguna palabra clave que coincida solo con expresiones lambda, p. lambda
, que tendría las características siguientes
void f(std::function<int(int)> func)
{
func(2);
}
template<typename T>
void g(T func)
{
func(2);
}
void h(lambda func)
{
func(2);
}
int main()
{
int fpointer(int);
struct { int operator()(int var) { return var; } } functor;
f(fpointer); //ok (actually a linker error, but for the sake of example)
f(functor); //ok
f([](int var) { return var; }); //ok
g(fpointer); //ok
g(functor); //ok
g([](int var) { return var; }); //ok
h(fpointer); //error -- function pointer isn't a lambda expr
h(functor); //error -- functor isn't a lambda expr
h([](int var) { return var; }); //ok
return 0;
}
Para ser honesto, realmente no se puede ver la utilidad de este (especialmente teniendo en cuenta que auto
acepta expresiones lambda, por lo que uno puede entonces asignar un lambda a una variable), pero todavía no me sienta bien que las expresiones lambda sean anónimas y no puedan vincularse específicamente a un solo tipo (con exclusión de todas las demás).
En esencia, mi pregunta es, ¿está bien que las expresiones lambda sean anónimas (tanto en términos de utilidad, la falta de un tipo lambda
nos despoja de alguna funcionalidad, y filosóficamente, tiene sentido? que las expresiones lambda siempre tienen el 'tipo' auto
)?
Suena como si no fuera consciente de que puede aceptar expresiones lambda usando 'std :: function' también. –
Yo estaba, sin embargo, ya que la funcionalidad general coincide con cómo funciona 'auto' (afaik), pensé que era innecesario agregar * otro * conjunto de funciones de ejemplo/llamadas a función (pero aún así es bueno mencionarlo, así que gracias, literalmente) – GRB
Creo hay un malentendido sobre el auto. auto no se puede usar como un tipo de parámetro en una función. No es un tipo. auto solo dice "deduce el tipo del inicializador porque soy demasiado vago o simplemente no puedo nombrar el tipo". – sellibitze