Question rapide : templates ...

Résolu
kamuikun Messages postés 9 Date d'inscription mercredi 7 octobre 2009 Statut Membre Dernière intervention 9 avril 2010 - 9 avril 2010 à 12:30
kamuikun Messages postés 9 Date d'inscription mercredi 7 octobre 2009 Statut Membre Dernière intervention 9 avril 2010 - 9 avril 2010 à 19:17
Bonjour,

Petite question concernant les templates en C++ :

En gros, j'ai une fonction qui peut avoir plusieurs variantes selon le type de son paramètre, mais la structure de la fonction est la même pour toutes les variantes, seul le type du paramètre change, j'aimerai donc utiliser les templates pour ne pas avoir à répéter mon code plusieurs fois inutilement (et c'est plus simple à maintenir), voilà un exemple concret :

J'ai un fichier fct.h avec la déclaration d'une fonction :
template<typename T>
void fct(T _arg);

Puis la définition dans un fichier fct.cpp :
#include "fct.h"
template<typename T>
void fct(T _arg) { }

Enfin, un fichier main.cpp principal :
#include "fct.h"
fct(int);
fct(float);
ect.

ça se compile, mais le linkage bug, car il ne trouve pas fct(int) ni fct(float)

La seule solution que j'ai trouvé pour l'instant c'est de mettre la définition carrément dans le .h, mais personnellement je ne trouve pas ça très propre...

Y'a t'il une autre solution plus correcte ? ou une autre manière sans utiliser les templates pour ce même problème ?

2 réponses

cptpingu Messages postés 3837 Date d'inscription dimanche 12 décembre 2004 Statut Modérateur Dernière intervention 28 mars 2023 123
9 avril 2010 à 13:27
Effectivement, c'est une excellente question :)

Il faut savoir que les templates ne sont pas du code, mais des générateurs de code ! Donc il n'existe pas à proprement parler dans ton code. Il ne peuvent donc pas être dans un .cpp et donc on ne peut pas les spécifier au linkage.

La solution propre:
.hh => Définition du template
.hxx => Écriture du template. Le .hxx est inclus par le .hh
.cc => le code (ou pas de .cc si ce n'est pas nécessaire, ce qui arrive très très souvent).

Je t'invite à regarder l'une de mes sources ou j'utilise cette technique:
http://www.cppfrance.com/codes/COMPILATEUR-PSEUDO-PASCAL_49318.aspx

_____________________________________________
Historique de mes créations, et quelques articles:[ http://0217021.free.fr/portfolio
http://0217021.free.fr/portfolio]
3
kamuikun Messages postés 9 Date d'inscription mercredi 7 octobre 2009 Statut Membre Dernière intervention 9 avril 2010
9 avril 2010 à 19:17
OK je voit comment ça marche maintenant, merci pour ta réponse :)
0
Rejoignez-nous