Modelos de funções e classes: revisão
Escreva funções e classes genéricas com a sintaxe correta de modelos
Modelos de funções e classes: revisão é uma aula grátis de C++ Academy no CoddyKit. Esta é a aula 1 de 4. Você pode ler a aula completa abaixo gratuitamente — depois pratica ao vivo no navegador com um editor de código integrado e um tutor de IA 24/7. Faz parte do caminho de aprendizado de C++ Academy, e seu progresso é sincronizado entre a web e o app CoddyKit. O curso de C++ Academy inclui 4 aulas no total.
Por que usar modelos
Os modelos permitem escrever o código uma vez e fazer com que o compilador gere versões específicas para cada tipo utilizado. São a base da programação genérica.
Sintaxe de modelo de função
Declare parâmetros de tipo com template <typename T>. Use T na assinatura da função.
template <typename T>
T max_of(T a, T b) {
return (a > b) ? a : b;
}
std::cout << max_of(3, 7); // int
std::cout << max_of(2.5, 1.5); // doubletypename versus class
As palavras-chave typename e class são intercambiáveis nas declarações de parâmetros de modelos. typename é mais comum no estilo moderno.
Vários parâmetros de tipo
Os modelos podem ter vários parâmetros de tipo.
template <typename T, typename U>
auto combine(T a, U b) -> decltype(a + b) {
return a + b;
}Parâmetros que não são tipos
Os parâmetros de modelos também podem ser valores que não são tipos: inteiros, enumerações e ponteiros.
template <typename T, size_t N>
struct StaticArray {
T data[N];
};
StaticArray<int, 10> arr;Modelos de classe
As classes genéricas usam a mesma sintaxe de modelos. Use o parâmetro de tipo para membros e métodos.
template <typename T>
class Stack {
std::vector<T> data_;
public:
void push(T x) { data_.push_back(std::move(x)); }
T pop() { T t = std::move(data_.back()); data_.pop_back(); return t; }
};
Stack<int> s1;
Stack<std::string> s2;Funções-membro fora da classe
As definições fora da classe precisam do prefixo de modelo em cada membro.
template <typename T>
class Stack {
public:
void push(T x);
};
template <typename T>
void Stack<T>::push(T x) {
data_.push_back(std::move(x));
}Argumentos padrão de modelos
Assim como os argumentos padrão de funções. São usados quando o chamador não especifica um valor.
template <typename T = int>
class Box {
T value;
};
Box<> b; // T is intDedução de argumentos de modelos
O compilador costuma deduzir os argumentos de modelos a partir da chamada.
template <typename T>
void print(T x) { std::cout << x; }
print(42); // T deduced as int
print("hello"); // T deduced as const char*
print<double>(3); // explicitDedução de argumentos de modelos de classe (C++17)
O C++17 permite omitir os argumentos do modelo de classe quando eles podem ser deduzidos do construtor.
std::pair p(1, 2.5); // pair<int, double>
std::vector v{1, 2, 3}; // vector<int>Pesquisa em duas fases
Os modelos passam por pesquisa em duas fases — na definição (nomes não dependentes) e na instanciação (nomes dependentes). Isso detecta muitos erros no momento da definição.
Mensagens de erro
Os erros de modelos podem ser intimidantes. Leia de baixo para cima, concentre-se no local de origem e use conceitos do C++20 para melhorar os diagnósticos.
Verificação rápida
Qual recurso permite que std::vector v{1, 2, 3}; seja compilado sem especificar std::vector<int>?
Recapitulação
Os modelos geram código específico para cada tipo durante a compilação. Defina modelos de função e de classe com template <typename T>. O compilador deduz os argumentos quando possível — especifique-os explicitamente quando necessário.
Perguntas Frequentes
A aula “Modelos de funções e classes: revisão” é grátis?
Sim — o texto completo de “Modelos de funções e classes: revisão” é grátis para ler aqui na web. Para praticá-la interativamente (um editor de código integrado e um tutor de IA 24/7) e desbloquear o restante do curso de C++ Academy, atualize para CoddyKit PRO. O curso de C++ Academy inclui 4 aulas no total.
O que vou aprender em “Modelos de funções e classes: revisão”?
Escreva funções e classes genéricas com a sintaxe correta de modelos Você pratica C++ Academy com código prático que executa diretamente no navegador, e um tutor de IA 24/7 responde suas dúvidas enquanto trabalha na aula.
Preciso ter experiência prévia para começar C++ Academy?
Nenhuma experiência prévia é necessária. C++ Academy no CoddyKit é estruturado para alunos iniciantes até avançados, então você pode começar aqui ou desde o início e aprender no seu ritmo. Esta é a aula 1 de 4.
Quanto tempo leva a aula “Modelos de funções e classes: revisão”?
A maioria das aulas CoddyKit leva cerca de 5–10 minutos. Cada uma é compacta e interativa, então você faz progresso constante e retoma exatamente de onde parou entre web e app.
Posso escrever e executar código nesta aula de C++ Academy?
Sim. Cada aula de C++ Academy inclui um editor de código integrado, então você escreve e executa código real direto no navegador e recebe feedback de IA instantaneamente — nenhuma configuração local necessária.
Todas as aulas deste curso
- Modelos de funções e classes: revisão
- Especialização parcial e total de modelos
- Modelos variádicos e pacotes de parâmetros
- Funções constexpr e if constexpr