En C++ un template c'est un modèle de code que tu peux instancier (c'est à dire que c'est à ce moment que ça va vraiment générer du code dans ton programme) suivant les paramètres que tu lui donnes. Le plus utile c'est que tu peux passer des types en paramètre
par exemple le template :
template<typename T> T min(T a, T b) { return a < b ? a : b; }
génèrera
int min(int a, int b) {return a < b ? a : b;}
si on l'appelle avec des ints :
int a, b;
int c = min(a, b);
Tu peux appeler ton template avec plusieurs types différents ça génèrera les fonctions pour chacun des types. C'est très puissant comme mécanisme, il y a beaucoup de templates dans la lib standard c++, comme des vecteurs qui peuvent donc contenir ce que tu veux