Última actualización:2026-10-12
Expresiones lambda de C++20 (parte 1)¶
Plantillas lambda en C++20¶
C++14 soporta expresiones lambda genéricas, lo que permite que una lambda acepte parámetros de cualquier tipo, por ejemplo:
Se expande a:
struct Func {
template <typename T1, typename T2>
auto operator()(T1 a, T2 b) const {
return a + b;
}
};
Pero no es capaz de lograr las siguientes expansiones:
Primera: el mismo tipo
Segunda: solo std::array
Tercera: sin deducción
Las lambdas de C++14 están muy bien, pero C++20 nos permite implementar estos casos con facilidad. C++20 permite que las expresiones lambda usen parámetros de tipo plantilla en su definición; he aquí la sintaxis básica:
A continuación, varios ejemplos ilustran sus ventajas.
1.Restricción de tipos¶
En un ejemplo como el siguiente, en C++14 podríamos escribir este código, pero lo que se pasa al usarlo no tiene por qué ser un vector, de modo que el comportamiento se desviaría de lo esperado y produciría errores.
A partir de C++20, podemos restringir su tipo:
Entonces surge la pregunta, y con ella una pregunta de entrevista: ¿sabes cómo garantizar la seguridad en C++14 para restringir un vector?
2.Reenvío perfecto¶
En C++20 puedes usar el reenvío perfecto con mucha facilidad, por ejemplo:
Entonces la pregunta es: frente a C++14, ¿qué ventaja tiene? Dicho de otro modo, ¿qué hacía falta para implementar el reenvío perfecto en C++14?
Fin de esta sección
Temas relacionados¶
- Introducción a las corrutinas de C++20 | C++那些事
- C++20 channel en la práctica | C++那些事
- Conceptos Concepts de C++20 | C++那些事
- constexpr y la expresión coma en C++20 | C++那些事
- Orden de bytes endian en C++20 | C++那些事
- Módulos Modules de C++20 | C++那些事
- La biblioteca Ranges de C++20 | C++那些事
- Diseño y trampas de std::span en C++20 | C++那些事
- Guía de las novedades de C++20 | C++那些事
- C++20 [[likely]] y [[unlikely]] | C++那些事