Template

dam1234 Messages postés 14 Date d'inscription lundi 24 février 2003 Statut Membre Dernière intervention 20 juillet 2005 - 1 avril 2003 à 10:45
cs_vieuxLion Messages postés 455 Date d'inscription samedi 26 octobre 2002 Statut Membre Dernière intervention 6 avril 2004 - 1 avril 2003 à 22:15
G un probleme avec une methode de classe declaree en template. J'aurai besoin de savoir comment est ce que l'on fait pour connaitre quel a été le type instancié lors de l'appel à la méthode car g des traitements à faire en rapport avec ce type. Si l'appel a ete fait avec mon parametre en tant que char * je dois faire une certaine chose et si par contre c un int alors g un autre traitement. Quelqu'un connait il un moyen de tester le type instancié??

template <class T>
void clientsql::Req_Supp(T valeur)
{
//supprime l'utilisateur ayant le numero num dans la base utilisateurs
  requete = "DELETE FROM utilisateurs WHERE ";
  if(la g besoin de tester le type de T!!!)    requete +"num '";
  else    requete +"nom '";
  requete += valeur;
  requete +="'";
  EnvoyerRequete();
};

G aussi un autre probleme, qd je definis le corps de ma methode ds un fichier separe de mon header, le linker m'indique une erreur alors que si la definition du corps est ds le header il n ya aucun probleme.

Merci! :question)
:question)

2 réponses

cs_Kaid Messages postés 949 Date d'inscription mardi 2 octobre 2001 Statut Membre Dernière intervention 8 juillet 2006 1
1 avril 2003 à 13:14
L'intérêt des templates est de faire du code générique, utilisable et identique pour tous les types. Là tu vas faire des tests pour connaitre le type de T et ta classe template ne sera plus vraiment générique. Mais voila comment faire:

// ...
#include <typeinfo.h>
// ...

// Dans ta méthode:
const type_info& typeInfo=typeid(T);

// Pour récupérer le nom du type
const char* nomType=typeInfo.name();

Pour ton autre problème, tu es obligé de définir les méthodes de ta classe template dans le header où tu la déclares.

Kaid - kaid.fr.st
0
cs_vieuxLion Messages postés 455 Date d'inscription samedi 26 octobre 2002 Statut Membre Dernière intervention 6 avril 2004 8
1 avril 2003 à 22:15
bonjour,

c'est très bien répondu, comme dab
une précision tout de même, si dam1234 est curieux :
la raison pour placer la définition de la fonction template dans le .h est la suivante.
C'est le compilateur qui est chargé de générer le corps de la fonction lorsqu'il trouve un APPEL (utilisation) de la fonction.
Si cet appel est dans un fichier séparé, il ne peut se contenter du prototype de la fonction pour générer le code typé de la fonction, il doit avoir le MODELE (ta définition), le moyen de lui donner est de l'inclure dans le .h

Cela ne brise pas vraiment les règles habituelles des .h car ce que l'on met n'est qu'une implémentation POTENTIELLE
0
Rejoignez-nous