Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Aprende Introduction to Template Specialization | Especialización de Plantillas
Templates en C++

Introduction to Template Specialization

Desliza para mostrar el menú

Una plantilla general funciona para cualquier tipo de dato. Sin embargo, ciertos tipos pueden requerir un tratamiento especial. Por ejemplo, si se está implementando una función que se comporta de manera diferente para los tipos int y std::string, la especialización de plantillas permite definir una versión diferente de la plantilla para cada tipo.

main.cpp

main.cpp

123456789101112
#include <iostream> template<typename T> T square(T value) { return value * value; } int main() { std::cout << square<int>(25); std::cout << square<std::string>("5"); }

Si ejecutas el código anterior, encontrarás un error. Esto ocurre porque std::string no admite el operador *. Por lo tanto, es necesario informar al compilador cómo manejar un std::string pasado como parámetro.

Cómo funcionan las plantillas internamente

Por ahora, solo estás comprendiendo los conceptos básicos de las plantillas, específicamente las plantillas de funciones. Has aprendido cómo crearlas, usar listas de parámetros y llamar a las funciones con diferentes tipos de datos. Puede que te preguntes por qué, en este caso, no simplemente sobrecargaríamos funciones para todos los tipos numéricos disponibles en C++. Aunque este enfoque podría funcionar para este ejemplo, es importante recordar que las plantillas son una herramienta mucho más poderosa.

main.cpp

main.cpp

12345678910111213
#include <iostream> struct myStruct {}; class myClass {}; template<typename T> void TemplateFunction() { std::cout << typeid(T).name() << std::endl; } int main() { TemplateFunction<myClass>(); TemplateFunction<myStruct>(); }

Las plantillas pueden aceptar cualquier tipo de dato, incluidos los tipos definidos por el usuario. En cambio, depender únicamente de la sobrecarga de funciones requeriría crear una nueva función para cada tipo, lo que haría que las actualizaciones fueran complicadas y propensas a errores. Por lo tanto, no podemos depender solo de la sobrecarga de funciones y debemos utilizar especializaciones de plantillas para abordar problemas como los que se presentan en la función plantilla square.

question mark

¿Por qué la plantilla de la función square en el ejemplo produce un error cuando se utiliza std::string?

Selecciona la respuesta correcta

¿Todo estuvo claro?

¿Cómo podemos mejorarlo?

¡Gracias por tus comentarios!

Sección 4. Capítulo 1

Pregunte a AI

expand

Pregunte a AI

ChatGPT

Pregunte lo que quiera o pruebe una de las preguntas sugeridas para comenzar nuestra charla

Sección 4. Capítulo 1
some-alt