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

Introdução à Especialização de Templates

Deslize para mostrar o menu

Um template geral funciona para qualquer tipo de dado. No entanto, certos tipos podem exigir um tratamento especial. Por exemplo, se você estiver implementando uma função que se comporta de maneira diferente para os tipos int e std::string, a especialização de template permite definir uma versão diferente do template 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"); }

Se você executar o código acima, encontrará um erro. Isso ocorre porque std::string não suporta o operador *. Portanto, é necessário informar ao compilador como lidar com um std::string passado como parâmetro.

Como os Templates Funcionam nos Bastidores

Neste momento, você está apenas compreendendo o básico sobre templates, especificamente templates de função. Você aprendeu como criá-los, usar listas de parâmetros e chamar as funções com diferentes tipos de dados. Pode surgir a dúvida sobre por que, nesse caso, não simplesmente sobrecarregar funções para todos os tipos numéricos disponíveis em C++. Embora essa abordagem possa funcionar neste exemplo, é importante lembrar que os templates são uma ferramenta muito mais 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>(); }

Templates podem aceitar qualquer tipo de dado, incluindo tipos definidos pelo usuário. Em contraste, depender apenas da sobrecarga de funções exigiria criar uma nova função para cada tipo, tornando as atualizações trabalhosas e propensas a erros. Portanto, não podemos depender apenas da sobrecarga de funções e devemos usar especializações de templates para resolver questões como as encontradas na função template square.

question mark

Por que o template da função square no exemplo produz um erro quando std::string é usado?

Selecione a resposta correta

Tudo estava claro?

Como podemos melhorá-lo?

Obrigado pelo seu feedback!

Seção 4. Capítulo 1

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