Le standard C++ permet de s�parer la d�claration d'une classe/fonction template de son impl�mentation au moyen du mot-cl�
export. En th�orie, il est donc possible de d�clarer sa classe/fonction template dans un fichier .h, et de l'impl�menter dans un .cpp, comme on le fait traditionnelement avec les fonctions/classes non template. Mais en pratique, c'est une fonctionnalit� si complexe � r�aliser que seul (� ce jour) quelques compilateurs bas�s sur le
front-end d'EDG impl�mentent (Comeau, Intel, ...). Qui plus est, il s'agit
d'une fonctionnalit� du langage contrevers�e dont le maitient dans la prochaine norme est d�battu. On peut donc consid�rer que m�me lorsque c'est possible, il n'est pas raisonnable de s�parer l'impl�mentation d'un template de sa d�claration dans l'�tat actuel des choses. Autrement dit, tout son code doit figurer dans le .h.
On peut cependant conserver la logique de la s�paration interface/impl�mentation en la simulant de cette mani�re:
1 2 3 4 5 6 7 8 9 10 11 12 13 14
|
// exemple.h
#ifndef EXEMPLE_H
#define EXEMPLE_H
template <typename T>
class Exemple
{
public:
Exemple();
};
#include "exemple.tpp" // <-- astuce ici !!!
#endif |
1 2 3 4 5 6
|
// exemple.tpp
template <typename T>
Exemple<T>::Exemple()
{
} |
L'astuce consiste � inclure � la fin du .h le fichier contenant le corps du template.
Notez l'utilisation de l'extension .tpp au lieu du classique .cpp afin de faire la distinction avec les fichiers cpp classiques (pouvant �tre compil�s, contrairement au code template qui doit d'abord �tre sp�cialis� avant de pouvoir �tre compil�). Il n'y a pas vraiment de convension, on trouve de nombreuses autres extensions : .htt, .tcc, .tpl, ... Libre � vous de choisir celle que vous pr�f�rez.
Partager