Plantillas variádicas y paquetes de parámetros
Use paquetes de parámetros y expresiones fold para escribir plantillas variádicas.
Plantillas variádicas y paquetes de parámetros 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.
Número variable de argumentos de plantilla
Las plantillas variádicas aceptan cualquier número de argumentos de plantilla. Se utilizan para escribir funciones como std::make_unique, std::tuple y sistemas de registro al estilo de printf.
Sintaxis de los paquetes de parámetros
Use typename... Ts para declarar un paquete de parámetros de tipo y Ts... para expandirlo.
template <typename... Args>
void print_all(Args... args) {
// ...
}Expansión de paquetes
Los ... que aparecen después de una expresión expanden el paquete en una lista separada por comas.
template <typename... Args>
void pass_through(Args... args) {
other_func(args...); // pass each arg
}Plantillas variádicas recursivas (estilo antiguo)
Antes de C++17, las funciones variádicas normalmente se escribían de forma recursiva: se procesaba un argumento y después se repetía el proceso con el resto.
// base case
void log() {}
// recursive case
template <typename T, typename... Rest>
void log(T first, Rest... rest) {
std::cout << first;
log(rest...);
}Expresiones fold (C++17)
C++17 añadió las expresiones fold, mucho más claras que la recursión. Permiten aplicar un operador a todo un paquete.
template <typename... Args>
auto sum(Args... args) {
return (args + ...); // fold +
}
std::cout << sum(1, 2, 3, 4); // 10Operadores fold
Hay cuatro formas de fold:
(... op pack): fold a la izquierda sobre una expansión unaria(pack op ...): fold a la derecha(init op ... op pack): fold a la izquierda con valor inicial(pack op ... op init): fold a la derecha con valor inicial
Impresión de todos los argumentos
Es un patrón habitual con un fold de comas.
template <typename... Args>
void print_all(Args... args) {
((std::cout << args << " "), ...); // comma fold
}
print_all(1, "hi", 3.14); // 1 hi 3.14Contar argumentos
sizeof...(pack) devuelve en tiempo de compilación el número de elementos de un paquete.
template <typename... Args>
void info(Args... args) {
std::cout << "count = " << sizeof...(args);
}Plantillas de clases variádicas
Las plantillas de clases también pueden tener paquetes de parámetros. Por ejemplo: std::tuple<Ts...>.
template <typename... Ts>
class Tuple {
// implementation uses recursion or storage tricks
};Perfect forwarding con paquetes
Combine plantillas variádicas con std::forward para reenviar perfectamente argumentos arbitrarios a un constructor.
template <typename T, typename... Args>
std::unique_ptr<T> my_make_unique(Args&&... args) {
return std::unique_ptr<T>(new T(std::forward<Args>(args)...));
}Manipulación de paquetes de tipos
Mediante la especialización de plantillas o las expresiones fold, puede implementar operaciones sobre listas en tiempo de compilación: obtener el primero o el último elemento, o descomponer la lista en cabeza y cola.
Errores habituales
Problemas comunes:
- Olvidar expandir el paquete (
argsfrente aargs...) - Orden de evaluación en las expresiones fold (la dirección, izquierda o derecha, importa para las operaciones no asociativas)
- Mayor tiempo de compilación debido a una recursión profunda
Comprobación rápida
¿Qué característica de C++17 simplifica la suma de todos los elementos de un paquete de parámetros?
Resumen
Las plantillas variádicas gestionan un número variable de argumentos de plantilla mediante paquetes de parámetros. Las expresiones fold de C++17 sustituyen el código variádico recursivo por expresiones concisas. Combinadas con el reenvío perfecto, permiten crear funciones factoría y mecanismos de despacho genéricos.
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 «Plantillas variádicas y paquetes de parámetros» es gratis?
Sí — el texto completo de «Plantillas variádicas y paquetes de parámetros» 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 «Plantillas variádicas y paquetes de parámetros»?
Use paquetes de parámetros y expresiones fold para escribir plantillas variádicas. 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 «Plantillas variádicas y paquetes de parámetros»?
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
- Repaso de plantillas de funciones y clases
- Especialización parcial y completa de plantillas
- Plantillas variádicas y paquetes de parámetros
- Funciones constexpr e if constexpr