Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Aprenda Especialização Parcial de Template | Especialização de Template
Templates em C++

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

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

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

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

O que é especialização parcial de template?

Selecione a resposta correta

Tudo estava claro?

Como podemos melhorá-lo?

Obrigado pelo seu feedback!

Seção 4. Capítulo 3

Pergunte à IA

expand

Pergunte à IA

ChatGPT

Pergunte o que quiser ou experimente uma das perguntas sugeridas para iniciar nosso bate-papo

Seção 4. Capítulo 3
some-alt