Repaso de plantillas de funciones y clases
Escriba funciones y clases genéricas con la sintaxis adecuada de plantillas.
Repaso de plantillas de funciones y clases es una lección gratuita de C++ Academy en CoddyKit. Esta es la lección 1 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.
¿Por qué usar plantillas?
Las plantillas le permiten escribir el código una vez y hacer que el compilador genere versiones específicas para cada tipo utilizado. Son fundamentales para la programación genérica.
Sintaxis de las plantillas de funciones
Declare los parámetros de tipo con template <typename T>. Use T en la signatura de la función.
template <typename T>
T max_of(T a, T b) {
return (a > b) ? a : b;
}
std::cout << max_of(3, 7); // int
std::cout << max_of(2.5, 1.5); // doubletypename frente a class
Las palabras clave typename y class son intercambiables en las declaraciones de parámetros de plantilla. typename es más habitual en el estilo moderno.
Varios parámetros de tipo
Las plantillas pueden tener varios parámetros de tipo.
template <typename T, typename U>
auto combine(T a, U b) -> decltype(a + b) {
return a + b;
}Parámetros que no son de tipo
Los parámetros de plantilla también pueden ser valores que no sean tipos: enteros, enumeraciones o punteros.
template <typename T, size_t N>
struct StaticArray {
T data[N];
};
StaticArray<int, 10> arr;Plantillas de clases
Las clases genéricas usan la misma sintaxis de plantillas. Use el parámetro de tipo para los miembros y métodos.
template <typename T>
class Stack {
std::vector<T> data_;
public:
void push(T x) { data_.push_back(std::move(x)); }
T pop() { T t = std::move(data_.back()); data_.pop_back(); return t; }
};
Stack<int> s1;
Stack<std::string> s2;Funciones miembro fuera de la clase
Las definiciones fuera de la clase necesitan el prefijo de plantilla en cada miembro.
template <typename T>
class Stack {
public:
void push(T x);
};
template <typename T>
void Stack<T>::push(T x) {
data_.push_back(std::move(x));
}Argumentos de plantilla predeterminados
Funcionan como los argumentos predeterminados de las funciones. Se utilizan cuando quien realiza la llamada no especifica ningún argumento.
template <typename T = int>
class Box {
T value;
};
Box<> b; // T is intDeducción de argumentos de plantilla
A menudo, el compilador deduce los argumentos de plantilla a partir de la llamada.
template <typename T>
void print(T x) { std::cout << x; }
print(42); // T deduced as int
print("hello"); // T deduced as const char*
print<double>(3); // explicitDeducción de argumentos de plantillas de clase (C++17)
C++17 permite omitir los argumentos de las plantillas de clase cuando se pueden deducir a partir del constructor.
std::pair p(1, 2.5); // pair<int, double>
std::vector v{1, 2, 3}; // vector<int>Búsqueda en dos fases
Las plantillas se someten a una búsqueda en dos fases: durante la definición (nombres no dependientes) y durante la instanciación (nombres dependientes). Esto detecta muchos errores en el momento de la definición.
Mensajes de error
Los errores de las plantillas pueden resultar intimidantes. Léalos desde el final hacia el principio, céntrese en la ubicación del código fuente y use conceptos de C++20 para mejorar los diagnósticos.
Comprobación rápida
¿Qué característica permite compilar std::vector v{1, 2, 3}; sin especificar std::vector<int>?
Resumen
Las plantillas generan código específico para cada tipo durante la compilación. Defina plantillas de funciones y de clases con template <typename T>. El compilador deduce los argumentos cuando es posible; especifíquelos explícitamente cuando sea necesario.
Preguntas frecuentes
¿La lección «Repaso de plantillas de funciones y clases» es gratis?
Sí — el texto completo de «Repaso de plantillas de funciones y clases» 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 «Repaso de plantillas de funciones y clases»?
Escriba funciones y clases genéricas con la sintaxis adecuada de plantillas. 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 1 de 4.
¿Cuánto tiempo toma la lección «Repaso de plantillas de funciones y clases»?
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