Ouais, il n'y a pas grand chose que tu puisses faire.
1/ Tu peux deplacer des parties du codes dans des unites de compilation differentes pour ne les compiler qu'une fois.
J'utilisais boost pour parser un format bibtex, et le temps de compilation de ce truc la etait monstrueux. Mais la fonction renvoyait un objet type sans template et ne prennait pas de parametre template non plus.
J'ai deplacer la fonction dans un fichier a part. Et du coup tant que je ne changais pas la facon de parser le fichier, je n'avais pas besoin de recompiler cette partie la du code. Et ca reduisait le temps de compilation pendant le developement parceque le fichier objet du parser n'etait jamais recompiler.
2/ Tu peux aussi utiliser l'explicit instanciation indiquer plus haut. Ca retire une partie des benefices de templates. Mais relativement peux, donc ca reste utilisable de facon tres generique.
3/ tu peux compiler en parallel. make -j 8 va invoquer 8 compilateurs ne meme tempos pour compiler 8 fichiers simultanement. C'est pas une solution parfaite mais ca aide!
4/ Tu peux changer de compilateur. J'ai des collegues bresiliens qui regardait comment optimiser gcc pour faire de la compilation parallele. ( https://interscity.org/assets/Improving-Parallelism-in-Git-and-GCC-Strategies-Difficulties-and-Lessons-Learned.pdf ) Mais je pense que c'est encore en developpement.
5/ Tu peux faire attention en ecrivant le code de ne pas faire des variantes pour rien.
C'est facil de se retrouver avec un
template <typename T>
void f (T i);
qui se retrouve invoque avec
f(1.0f);
f(1.0d)
Et peut etre ca fait exactement la meme chose dans ton cas d'utilisation particulier, mais ca force le compilateur a faire deux versions. Tu peux avoir des truc comme ca qui arrive avec des pointeurs ou des references ou tu te retrouve a invoquer la fonction avec des pointeurs const et des pointeurs non const. Et ca compile deux fois alors que tu ne change pas la valeure. Donc si tu cast le pointeur const a l'invocation de la fonction, tu evites de compiler deux fonctions differentes. Tu peux avoir la meme avec des unsigned.