Última atualização:2026-10-12
Dedução com auto em templates no C++17¶
Em C++, tudo pode ser auto¶
O C++17 introduziu muitos recursos destinados a aumentar a expressividade do código e a reduzir a verbosidade dos templates. Um dos aprimoramentos mais notáveis é a capacidade de usar a palavra-chave auto para declarar parâmetros de template não tipo. Em certos cenários, esse recurso é especialmente conveniente, pois elimina a necessidade de declarações explícitas de tipo. A seguir, vou apresentar como uso esse recurso no meu trabalho, ou seja, em bancos de dados!
Aprendendo na prática: o código-fonte completo desta seção será enviado ao Planeta; se tiver interesse, veja o QR code no fim da página.
Parâmetros de template não tipo com auto no C++17¶
Ordenação no contexto de bancos de dados¶
Considere uma classe Foo relacionada a bancos de dados, que você deseja ordenar de acordo com uma ordem específica representada por uma enumeração:
Você tem instâncias de Foo com ordens de classificação diferentes:
A forma antiga de implementar¶
Antes do C++17, poderíamos implementar assim:
Contudo, isso poderia causar erros, porque o compilador não consegue inferir o argumento de template 'U'.
A forma simplificada atualmente¶
A partir do C++17, para parâmetros de template não tipo, podemos usar a palavra-chave auto como substituto:
Essa forma é mais simples, permitindo usar parâmetros de template não tipo sem especificar o tipo explicitamente.
Simplificação do integral_constant¶
Antes, poderíamos implementar integral_constant da seguinte forma:
E agora basta:
Essa simplificação torna o código mais claro e legível.
Conclusão¶
O uso da palavra-chave auto introduzido no C++17 para declarar parâmetros de template não tipo simplifica enormemente o código de templates. Ao eliminar declarações de tipo trabalhosas, conseguimos expressar a intenção do código de forma mais intuitiva, melhorando a legibilidade e a manutenibilidade. Ao lidar com cenários como ordenação, esse recurso é particularmente útil, permitindo-nos focar na essência do problema, e não nos detalhes dos parâmetros de template.
Tópicos relacionados¶
- Atributo [[nodiscard]] no C++17 | C++那些事
- C++17 std::string_view | C++那些事
- Recursos de memória PMR no C++17 | C++那些事
- Dezessete funcionalidades avançadas do C++17 | C++那些事
- Dedução de argumentos de template de classe CTAD no C++17 | C++那些事
- C++17 optional_ref | C++那些事
- C++17 std::variant | C++那些事
- Vinculações estruturadas no C++17 | C++那些事
- Templates de variável no C++17 | C++那些事