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

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 Probleme sur une methode [ par kild ] Bonjourje desire crée un exe ki execute via le choix de l'utilisateur un autre executable dont g po les sources et ki utilise des commandes en ligne d probleme macro et cast !!! argh !!! [ par ToasTy62 ] bon voila le pb : g fé une tite macro ac une condition mais ca marchas pas des masses... un ti peu d'aide serait vraiment le bienvenue !!! marchi !reg Template matrice [ par anisdilou ] Je souhaite q'on s'aide a fin d'meliorer nos nivauxSalut : Je veux implémenter une classe qui représente des matrices de dimensions et type de donnés Serialisation de CList ( Probleme, aucune données n'est sauvegardées) [ par preda ] J'ai une classe template comprenant d'autres classes génériques, la classe template ELEMENT est parfaitement sérialisable.Ensuite j'ajoute la templat Probleme MFC [ par Baygon_Vert ] Voila,je commence a m interesser aux MFC depuis quelques jours, et malgré les heures passées dans la MSDN, je n arrive pas a repondre a un probleme si probleme de compilation [ par casper_2 ] A ma compilation g un message de type:(transfert est une fonction);warning:type mismatch with previous implicit declarationwarning:previous implicit d Probleme de compilatio en utilisant des socket [ par casper_2 ] Bonjour,j'utilise dev_cpp,et je debute avec l'utilisation des sockets.ama compilation,g un message de type"  [Linker error] undefined reference to `WS probleme deuxieme requete client serveur [ par khanjri ] bonjour a tousje developpe un programme client/serveur, la communication passe entre le client et le serveur, mon probleme est le suivant: quand le se Class derivée , Template ( POURQUOI ES-CE CI DIFFICILE) ??? [ par nawakator ] J'ai déjà posé cette question, mais je la repose car elle est essentiel pour mon projet!J'ai créer un template permettant de géré une liste chainé de


Nos sponsors

Sondage...

CalendriCode

Octobre 2008
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
2728293031  

Consulter la suite du CalendriCode

Téléchargements

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



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel BAÏSE, 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 : 0,515 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é.