Lembre-se de que os modelos sendo a melhor solução são muito raros. Eu só defini o meu uma vez nos últimos 5 anos, e meus colegas que revisaram esse código nunca o fizeram. Os casos em que os modelos fazem muito sentido já foram implementados na maioria das bibliotecas padrão.
Para programação genérica, o importante a ser observado é que você está copiando e colando funções para fazer apenas pequenas alterações, como constantes ou tipos, e não consegue descobrir uma maneira limpa de usar algo como herança ou parâmetros de função para evitar repetições. você mesmo.
Uma maneira bastante comum de os modelos serem utilizados é a segurança de tipos, se você tiver tipos que se comportam da mesma forma, mas, por qualquer motivo, não os queira misturar acidentalmente.
Para o cálculo do tempo de compilação usando modelos, o importante a ser observado é o uso intensivo de recursos, onde todas as suas entradas são conhecidas em tempo de compilação, mas onde diferentes entradas constantes são usadas em diferentes locais do código. No entanto, lembre-se de que isso reduzirá a velocidade de suas compilações todas as vezes; portanto, é preferível codificar manualmente os resultados manualmente, se eles não forem alterados com muita frequência.
Alguns advogados usam modelos para micro-otimizações, como evitar pesquisas de tabelas virtuais usando polimorfismo estático ou desenrolar o loop, mas na minha opinião a complexidade geralmente supera os ganhos de desempenho, a menos que seu código seja muito crítico para o desempenho.