Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

Sujet : template [ Archives / Au secours ] (dam1234)

mardi 1 avril 2003 à 10:45:46 | template

dam1234

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!

mardi 1 avril 2003 à 13:14:16 | Re : template

Kaid


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

-------------------------------
Réponse au message :
-------------------------------

> 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!
>

mardi 1 avril 2003 à 22:15:57 | Re : template

vieuxLion

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





-------------------------------
Réponse au message :
-------------------------------

>
> 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
>
> -------------------------------
> Réponse au message :
> -------------------------------
>
> > 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!
> >
>



Cette discussion est classé dans : methode, type, probleme, requete, template


Répondre à ce message

Sujets en rapport avec ce message

Pb de syntaxe avec une methode template d'une classe template. [ par gaspos ] Bonjour,voici une classe template dont l'une des méthode a un type template en plus :template struct foo    {    // première methode sans type templa Une chose m'echappe [ par julienbornet ] Bonjour alors voial j'ai un petit probleme dont je n'arrive pas a trouver la cause. Bon comme c'est assez complexe a expliquer je vais essayer d'etre Erreur d'execution R6002 [ par julienbornet ] Bonjour alors voial j'ai un petit probleme dont je n'arrive pas a trouver la cause. Bon comme c'est assez complexe a expliquer je vais essayer d'etre probleme structure et fonction [ par yanne1985 ] salutj'ai lcode suivanttypedef struct{    int n;   //......}essai;void miseZero(type **un_type){    (*un_type)->n=0;}int main(){    type *un_type;    inverser les octets d'un type double [ par totoscill ] Bonjour,Je souhaite tourner les octets de données de type double (probleme de big endian/ little endian).Pour des données de type long ou short pas de Template et operator= (c++) [ par Crownless00 ] J'ai la classe template suivante :template class Point3D{public :    Point3D(Type posX, Type posY, Type posZ) {...}    Point3D() {x = 0; y = 0; z = 0; Probleme Pointeur / Type [ par Math1004 ] Bonjour .J ai un probleme que je n arrive pas a resoudre meme si je pense avoir trouvé la cause .J'ai la fonction suivante :void SupprimerPart(int *nb Recuperer le type d'un template [ par juju0169 ] Bonsoir! Désolé de vous déranger mais j'ai un petit soucis que je ne vois pas comment résoudre.Je vais essayer d'être le plus clair possible!VOilà j'a probleme de pointeur et de liste chainée [ par krater ] sur un projet de video-club nous avons utilise une liste double chainées cepedant, nous avons quelque récurent à la compillation si une reponse pouvai


Nos sponsors

Sondage...

CalendriCode

Juillet 2009
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
2728293031  

Consulter la suite du CalendriCode

Téléchargements

Logiciels à télécharger sur le même thème :

Comparez les prix Nouvelle version

Photothèque Nouveau !



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés
Temps d'éxécution de la page : 3,838 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.