Lambdas genéricas y cierres en C++14
Escriba lambdas genéricas con parámetros auto y razone sobre los tipos de cierre.
Lambdas genéricas y cierres en C++14 es una lección gratuita de C++ Academy en CoddyKit. Esta es la lección 3 de 4. Puedes leer la lección completa abajo gratuitamente — luego la practicas en el navegador con un editor de código integrado y un tutor de IA 24/7. Forma parte de la ruta de aprendizaje de C++ Academy, y tu progreso se sincroniza en la web y la app de CoddyKit. El curso de C++ Academy incluye 4 lecciones en total.
Lambdas genéricas
C++14 permite escribir auto en la lista de parámetros de una lambda. El compilador genera un operator() parametrizado; la lambda acepta cualquier tipo.
auto print = [](const auto& x) {
std::cout << x << "\n";
};
print(42);
print("hello");
print(3.14);Cómo funcionan
La lambda se convierte en una clase con un operator() parametrizado. Cada combinación única de tipos instancia una función independiente internamente.
Casos de uso
Las lambdas genéricas son especialmente útiles en algoritmos que funcionan con varios tipos.
std::vector<int> ints = {1, 2, 3};
std::vector<std::string> strs = {"a", "b"};
auto printAll = [](const auto& container) {
for (const auto& x : container) std::cout << x << " ";
};
printAll(ints);
printAll(strs);Varios parámetros auto
Cada auto es independiente: distintos parámetros pueden resolverse en tipos diferentes.
auto add = [](auto a, auto b) {
return a + b;
};
std::cout << add(1, 2.5); // 3.5
std::cout << add(std::string("Hi"), "!"); // Hi!Las clausuras son objetos
Cada expresión lambda crea una clausura: una instancia de una clase única generada por el compilador. La clausura almacena como miembros las variables capturadas.
Un tipo único por lambda
Cada expresión lambda tiene un tipo único, aunque dos expresiones tengan un texto idéntico. No puede escribir directamente el nombre del tipo; use auto o std::function.
Almacenar lambdas en std::function
Para almacenar una lambda en una variable cuyo tipo sea conocido, envuélvala en std::function. Esto añade una pequeña sobrecarga, pero permite el polimorfismo en tiempo de ejecución entre objetos invocables.
#include <functional>
std::function<int(int)> doubler = [](int x) { return x * 2; };Coste del borrado de tipos
std::function utiliza borrado de tipos: puede almacenar cualquier objeto invocable compatible, pero añade una asignación en el montón y una llamada virtual. Evítelo en bucles críticos.
Cuándo basta con auto
Para lambdas de corta duración (pasadas a algoritmos y almacenadas en auto), no se necesita borrado de tipos y no hay sobrecarga.
Devolver lambdas
Use auto como tipo de retorno para devolver una lambda. Cada llamada crea una clausura nueva.
auto makeAdder(int n) {
return [n](int x) { return x + n; };
}
auto add5 = makeAdder(5);
std::cout << add5(10); // 15Funciones de orden superior
Las lambdas convierten C++ en un entorno cómodo para las funciones de orden superior: funciones que reciben o devuelven otras funciones.
Comprobación rápida
¿Qué significa auto en la lista de parámetros de una lambda de C++14?
Resumen
Las lambdas genéricas de C++14 usan parámetros auto para lograr polimorfismo en tiempo de compilación. Cada lambda es un tipo de clausura único: use auto para almacenarlas o std::function cuando sea necesario el borrado de tipos.
Aprende C++ con un tutor de IA — gratis
Escribe y ejecuta código real en tu navegador, obtén ayuda instantánea de un tutor de IA disponible 24/7 y continúa donde lo dejaste en la web o en la aplicación.
- Cursos
- 51
- Lecciones
- 203
Preguntas frecuentes
¿La lección «Lambdas genéricas y cierres en C++14» es gratis?
Sí — el texto completo de «Lambdas genéricas y cierres en C++14» es gratis para leer aquí en la web. Para practicarla de forma interactiva (editor de código integrado y tutor de IA 24/7) y desbloquear el resto del curso de C++ Academy, actualiza a CoddyKit PRO. El curso de C++ Academy incluye 4 lecciones en total.
¿Qué aprenderé en «Lambdas genéricas y cierres en C++14»?
Escriba lambdas genéricas con parámetros auto y razone sobre los tipos de cierre. Practicas C++ Academy con código real que ejecutas directamente en el navegador, y un tutor de IA 24/7 responde tus preguntas mientras trabajas en la lección.
¿Necesito experiencia previa para empezar C++ Academy?
No se requiere experiencia previa. C++ Academy en CoddyKit está estructurado para principiantes hasta estudiantes avanzados, así que puedes empezar aquí o desde el inicio y avanzar a tu ritmo. Esta es la lección 3 de 4.
¿Cuánto tiempo toma la lección «Lambdas genéricas y cierres en C++14»?
La mayoría de las lecciones de CoddyKit toman alrededor de 5–10 minutos. Cada una es compacta e interactiva, así que avanzas constantemente y retomas exactamente por donde dejaste en la web y la app.
¿Puedo escribir y ejecutar código en esta lección de C++ Academy?
Sí. Cada lección de C++ Academy incluye un editor de código integrado, así que escribes y ejecutas código real directamente en tu navegador y obtienes retroalimentación instantánea de IA — sin configuración local necesaria.
Todas las lecciones de este curso
- Objetos función y functors
- Capturas lambda por valor, por referencia y mutable
- Lambdas genéricas y cierres en C++14
- std::function: objetos invocables con borrado de tipos