Il C++ consente di creare delle funzioni che sono applicabili a più tipi di dati, quindi con la possibilità di creare un'unica direttiva e risparmiare codice.
Un template viene definito in questo modo:

template <class TIPO> tipo_ritorno nome(param)
{
codice
}

Qui TIPO indica solamente un dato generale     ( es. <class Ciao> ), tipo_ritorno lo indichiamo con void, perchè non restituiremo niente, nome rappresenta il nome della funzione template e param la lista dei parametri.
Ecco un esempio:

template <class A> void ciao(A &a, A &b) {
/*
qui possiamo modificare a nostro piacere le variabili a e b passate tramite refence.
*/
}

Per richiamare la funzione template, dovete comportarvi come se fosse una normale funzione cioè:

ciao(primo_parm, secondo_parm);