Bonsoir à tous,

Comme je ne l'ai jamais fait auparavant, je voudrai voir (au moins une fois) comment est ce qu'on peut séparer dans deux fichiers (un .h et et .cpp) la compilation d'une classe template. Suite à la lecture de quelques articles en ligne, j'en suis arrivé à l'organisation suivante des deux fichiers :

Dans le header que je nomme C.h j'écris :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
template <typename T> class C
{
    T attrbut1
    std::vector<C*> attribut2
 
public:
 
    //constructeur et méthodes
 
};

Dans le C.cpp :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include "C.h"
 
template class C<int>;
template class C<float>;
template class C<std::string>;
template class C<double>;
template class C<char>;
 
template class C<int*>;
template class C<float*>;
template class C<std::string*>;
template class C<double*>;
template class C<char*>;
 
//Exemple d'implémentation d'une méthode :
template <typename T>
C<T>* C<T>::f(int pos)const
{
    // Traitement
    return …. ;
}

Dans le main, je fais un include du C.h avec #include "C.h", et j'utilise la classe comme ci j'avais défini tout le corps de ma classe dans le .h Par exemple, j'écris :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
C<int>* var=new C<int>(12);
Malheureusement, quand je compile, j'ai à peu près 11 erreurs de link.

Y a-t-il quelque chose qui m'échappe encore ?

Bien cordialement.