Originariamente inviato da Neptune
- Quano intestazione e corpo del metodo/funzione sono separati il compilatore ha qualche problema nel fare questa operazione, anche se non sono riuscito ad intendere che genere di problema.
La questione è la seguente: il codice di un template non è vero codice, ma direttive che istruiscono il compilatore su come genere il codice effettivo nel momento in cui il template viene effettivamente utilizzato (=istanziazione del template).

Le direttive in questione devono essere presenti completamente in tutte le unità di compilazione (=.cpp) in cui verrà usato il template, altrimenti il compilatore al momento dell'istanziazione del template non saprà come generarlo effettivamente. In generale infatti non è possibile contenere queste direttive nei moduli oggetto, che contengono solo codice già compilato (e i template, non essendo nemmeno ancora codice C++ "completo", non possono essere compilati se non hanno tutti i parametri già sostituiti).
Quindi l'unica soluzione è sviluppare i metodi direttamente nella dichiarazione di classe? non ci sono scappatoie semplici?
È una delle soluzioni più diffuse. I metodi in ogni caso non risulteranno inline se sono troppo grossi perché il compilatore si arrangerà a trasformarli in metodi non-inline, e gli eventuali duplicati (accade ad esempio se si usa una classe template con gli stessi parametri in due unità di compilazione diverse) vengono eliminati dal linker (per via della One Definition Rule, punto 3).

Una alternativa è tenere dichiarazione e definizione separate come in una classe normale, ma fare sì che esse siano sempre incluse quando si include lo header che contiene il template. Puoi o mettere tutto nel .hpp oppure tenere la dichiarazione nel .hpp, la definizione in un .tpl (o .tcc o altro ancora, non c'è molto accordo su che estensione usare, ma in generale è meglio evitare il .cpp) e #includere quest'ultimo in coda alla dichiarazione della classe template.

Esiste anche un altro metodo (spiegato nel link sopraindicato) per tenere le implementazioni in un .cpp e istanziare lì i template che si sa che serviranno, ma secondo me è molto scomodo come metodo.
Quindi a questo punto la mia libreria cosa diventa? Un file .h da includere e stop?
Sì.

(le altre risposte dopo cena )