🧩 Exercícios: Templates de Funções, Classes e Constraints com Concepts
Spec Sistemas Com Cpp • Trilha Progressiva em 4 Níveis
🧭 Navegação Pedagógica
-
📖 Teoria do Capítulo 💻 Exemplos 📊 Slides 🧠 Quiz
🎯 Nível 1: Fundamentos
Problema 13.1 — Template de Função Genérica com Dedução Automática de Tipos
Contexto: Template de Função Genérica com Dedução Automática de Tipos no contexto de Templates de Funções, Classes e Constraints com Concepts.
Requisitos de Execução:
- Criar template
template <typename T> T maximo(T a, T b)funcionando para inteiros, floats e strings.
Resultado Esperado
Template genérico resolvendo tipos heterogêneos de forma elegante.
📤 Instruções de Entrega (Microsoft Teams)
- Salve o arquivo como:
Atividade_13_1_SeuNome - Envie na tarefa:
Atividade Cap 13 - Templates de Funções, Classes e Constraints com Concepts
🔑 Gabarito de Código & Solução Comentada
#include <iostream>
#include <string>
template <typename T>
T maximo(T a, T b) {
return (a > b) ? a : b;
}
int main() {
std::cout << "Max int: " << maximo(10, 50) << std::endl;
std::cout << "Max double: " << maximo(3.14, 2.71) << std::endl;
return 0;
}
🔍 Nível 2: Prática
Problema 13.2 — Definição de Concepts Customizados no C++20 com concept e requires
Contexto: Definição de Concepts Customizados no C++20 com concept e requires no contexto de Templates de Funções, Classes e Constraints com Concepts.
Requisitos de Execução:
- Criar concept
template <typename T> concept Numerico = std::is_arithmetic_v<T>;restringindo templates.
Resultado Esperado
Restrição de tipos validada: Apenas tipos numéricos permitidos pelo compilador.
📤 Instruções de Entrega (Microsoft Teams)
- Salve o arquivo como:
Atividade_13_2_SeuNome - Envie na tarefa:
Atividade Cap 13 - Templates de Funções, Classes e Constraints com Concepts
🔑 Gabarito de Código & Solução Comentada
#include <iostream>
#include <concepts>
template <typename T>
concept Numerico = std::integral<T> || std::floating_point<T>;
template <Numerico T>
T dobrar(T val) {
return val * 2;
}
int main() {
std::cout << "Dobro: " << dobrar(25) << std::endl;
// dobrar("texto"); // Erro de compilação claro e legível!
return 0;
}
⚡ Nível 3: Integração
Problema 13.3 — Sintaxe Abreviada de Funções Restritas com auto e Concepts
Contexto: Sintaxe Abreviada de Funções Restritas com auto e Concepts no contexto de Templates de Funções, Classes e Constraints com Concepts.
Requisitos de Execução:
- Declarar função utilizando
void imprimir(std::integral auto n)simplificando templates de função.
Resultado Esperado
Sintaxe concisa de C++20 validando tipos de forma declarativa.
📤 Instruções de Entrega (Microsoft Teams)
- Salve o arquivo como:
Atividade_13_3_SeuNome - Envie na tarefa:
Atividade Cap 13 - Templates de Funções, Classes e Constraints com Concepts
🔑 Gabarito de Código & Solução Comentada
#include <iostream>
#include <concepts>
void imprimir_inteiro(std::integral auto n) {
std::cout << "Inteiro verificado: " << n << std::endl;
}
int main() {
imprimir_inteiro(1024);
return 0;
}
🏆 Nível 4: Desafio Corporativo
Problema 13.4 — Template Metaprogramming com Variadic Templates e Fold Expressions
Contexto: Template Metaprogramming com Variadic Templates e Fold Expressions no contexto de Templates de Funções, Classes e Constraints com Concepts.
Requisitos de Execução:
- Somar quantidade arbitrária de argumentos utilizando fold expression
(... + args)em tempo de compilação.
Resultado Esperado
Soma variádica desdobrada em instrução única pelo compilador.
📤 Instruções de Entrega (Microsoft Teams)
- Salve o arquivo como:
Atividade_13_4_SeuNome - Envie na tarefa:
Atividade Cap 13 - Templates de Funções, Classes e Constraints com Concepts
🔑 Gabarito de Código & Solução Comentada
#include <iostream>
template <typename... Args>
auto somar_tudo(Args... args) {
return (... + args); // Fold expression C++17/C++20
}
int main() {
std::cout << "Soma Total: " << somar_tudo(1, 2, 3, 4, 5) << std::endl;
return 0;
}
| ⬅️ Voltar ao Índice de Exercícios | 📚 Sumário de Tópicos |