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 :
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 :
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 :
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.
Partager