Especialização Parcial de Template
Deslize para mostrar o menu
A especialização de template para um template de parâmetro único é direta, mas se torna mais complexa com múltiplos parâmetros. É nesse contexto que a especialização parcial de template é utilizada. Ela permite criar uma versão especializada de um template para subconjuntos específicos de tipos ou valores.
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; }
Sintaxe da Especialização Parcial de Template
A especialização parcial de template pode ser vista como uma forma de sobrecarga de template. Veja as regras a seguir:
Na especialização parcial, uma nova versão de uma função template é definida com alguns de seus parâmetros fixados em tipos específicos, enquanto outros permanecem genéricos. O compilador utiliza essa versão especializada sempre que encontra tipos correspondentes durante a instanciação do template.
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; }
Essa é uma forma de utilizar a especialização de templates, mas existe outro cenário, mais comum.
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); }
Obrigado pelo seu feedback!
Pergunte à IA
Pergunte à IA
Pergunte o que quiser ou experimente uma das perguntas sugeridas para iniciar nosso bate-papo