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

Especialización Parcial de Plantillas

Desliza para mostrar el menú

La especialización de plantillas para una plantilla de un solo parámetro es sencilla, pero se vuelve más compleja con múltiples parámetros. Aquí es donde entra la especialización parcial de plantillas. Permite crear una versión especializada de una plantilla para subconjuntos específicos de tipos o valores.

main.cpp

main.cpp

12345678
// What if `T1` and `T2` are the same type? // Or what if you want to define special behavior when `T1` is a `std::string`? template<typename T1, typename T2> void TemplateExample(T1 first, T2 second) { std::cout << "Generic template!" << std::endl; }

Sintaxis de la especialización parcial de plantillas

Se puede considerar la especialización parcial de plantillas como una forma de sobrecarga de plantillas. A continuación se presentan las reglas a seguir:

En la especialización parcial, se define una nueva versión de una función plantilla con algunos de sus parámetros fijados a tipos específicos, mientras que otros permanecen como genéricos. El compilador utiliza esta versión especializada siempre que encuentra tipos coincidentes durante la instanciación de la plantilla.

main.cpp

main.cpp

123456789101112131415
#include <iostream> // Primary template template<typename T1, typename T2> bool IsSameType(T1 first, T2 second) { return false; } // Partial specialization for when both types are the same template<typename T> bool IsSameType(T first, T second) { return true; } int main() { std::cout << IsSameType(10, 'a') << std::endl; std::cout << IsSameType("Hello", "World") << std::endl; }

Esa es una forma de utilizar la especialización de plantillas, pero existe otro escenario más común.

main.cpp

main.cpp

123456789101112131415
#include <iostream> // Primary template template <typename T1, typename T2> // General case void Template(T1 a, T2 b) { std::cout << "General" << std::endl; } // Partial specialization for when `T1` is `bool` template <typename T2> // Special case when the first type is `bool` void Template(bool a, T2 b) { std::cout << "Special" << std::endl; } int main() { Template(false, 25); Template(100, 300); }
question mark

¿Qué es la especialización parcial de plantillas?

Selecciona la respuesta correcta

¿Todo estuvo claro?

¿Cómo podemos mejorarlo?

¡Gracias por tus comentarios!

Sección 4. Capítulo 3

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 3
some-alt