📊 Capítulo 13: Templates & Concepts C++20
Especialização em Sistemas com C++
🗺️ A Morte dos Erros Gigantes de Template com Concepts do C++20
flowchart TD
subgraph LEGACY ["Templates Pré-C++20 (SFINAE / Erros Criptográficos)"]
L1["template <typename T>\nT somar(T a, T b) { return a + b; }\n(Se passar um tipo sem operador +, o compilador despeja 300 linhas de erro ilegível!) 🚨"]
end
subgraph CONCEPTS ["Concepts do C++20 (Restrições Expressivas e Claras)"]
C1["template <std::integral T>\nT somar(T a, T b) { return a + b; }\n(Se passar 'std::string', o compilador emite UMA ÚNICA LINHA clara:\n'error: constraints not satisfied for somar<std::string>') ⚡"]
end
LEGACY -.-> |"C++20"| CONCEPTS
style LEGACY fill:#ffebee,stroke:#d32f2f,stroke-width:2px
style CONCEPTS fill:#e8f5e9,stroke:#4caf50,stroke-width:2px
🎯 Slide 1: Definindo Concepts Customizados com requires
template <typename T>
concept Imprimivel = requires(T x) {
{ std::cout << x } -> std::same_as<std::ostream&>;
};
void exibir(Imprimivel auto const& valor) {
std::cout << valor << '\n';
}
🎯 Slide 2: Variadic Templates e Fold Expressions
template <typename... Args>
auto somar_tudo(Args... args) {
return (... + args); // Fold expression unária à direita (C++17+)
}
- Soma qualquer número arbitrário de argumentos em tempo de compilação sem loops recursivos!
🎯 Slide 3: Constrained Auto no C++20
std::floating_point auto taxa = 0.05;- Garante que a dedução automática de tipo atenda obrigatoriamente a um concept numérico de ponto flutuante!
🔗 Navegação do Capítulo 13
| 📖 Ler Conteúdo Completo | 🧠 Fazer Quiz | 💻 Ver Exemplos | 🧩 Exercícios |
Slide 1 de 1
Atalhos: ← → Navegar • Espaço Avançar • F Tela Cheia • Home Início • End Fim