Spec Sistemas Com Cpp • Trilha Progressiva em 4 Níveis


🧭 Navegação Pedagógica


🎯 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:

  1. 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)

  1. Salve o arquivo como: Atividade_13_1_SeuNome
  2. 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:

  1. 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)

  1. Salve o arquivo como: Atividade_13_2_SeuNome
  2. 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:

  1. 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)

  1. Salve o arquivo como: Atividade_13_3_SeuNome
  2. 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:

  1. 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)

  1. Salve o arquivo como: Atividade_13_4_SeuNome
  2. 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