begin process at 2012 05 30 13:31:41
  Trouver un code source :
 
dans
 
Accueil > Forum > 

C++ & C++ .NET

 > 

Divers

 > 

Général

 > 

Testez le typename avec une classe utilisant les templates


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

Testez le typename avec une classe utilisant les templates

vendredi 28 juillet 2006 à 15:57:00 | Testez le typename avec une classe utilisant les templates

amorosalain



[size=6][b][i]SAM[/i][/b][/size=6]
Bonjour à tous.

J'ai besoin d'un peu d'aide.

J'ai une classe ou j'utilise un template.

template<typename T>
maclasse<T>::mamethode(...)
{
}

dans cette méthode, je voudrais tester si T est un int, un short ... afin d'affecter une valeur dans le but d'écrire un format de fichier

ex :
si (T est un int) alors mastruct->type = I_INTEGER;

Est-ce possible et si oui comment faire ?

A noter que je pourrais tester la taille avec sizeof(T) mais alors, je ne pourrais pas faire la différence entre un short et un unsigned short.

Avec un grand merci.

++
vendredi 28 juillet 2006 à 16:29:13 | Re : Testez le typename avec une classe utilisant les templates

amorosalain

Réponse acceptée !


[size=6][b][i]SAM[/i][/b][/size=6]
Salut.

Je réponds tout seul à ma question car j'ai eu la réponse.

En faites, dans le .h, on déclare des méthodes surchargées.
long GetTypeId(char value);
long GetTypeId(unsigned char value);
...

dans le .cpp

template<typename T>
long maclasse<T>::GetTypeId(char value)
{
   return I_CHAR;
}

template<typename T>
long maclasse<T>::GetTypeId(unsigned char value)
{
   return I_UCHAR;
}
etc...

et dans la fonction qui a besoin du type

T value = 0;
mastruct->type = GetTypeId(value);

c'était très simple mais il fallait y penser et je devais être beaucoup fatigué.

bon code ++
vendredi 28 juillet 2006 à 16:38:31 | Re : Testez le typename avec une classe utilisant les templates

vecchio56

Administrateur CodeS-SourceS
Ah tu as trouvé... Pendant ce temps j'étais parti sur une autre piste, avec les typeid (je pense que ta solution est meilleure, j'y avais pas pensé non plus).

#include <iostream>
#include <typeinfo>

using namespace std;

template <typename T>
void f(T x)
{
  if(typeid(x) == typeid(short)) cout << "short" << endl;
  else if(typeid(x) == typeid(unsigned short)) cout << "unsigned short" << endl;
}

int main()
{
  short x = 1;
  unsigned short y = 2;
  f(x);
  f(y);
}

_____________________________________
Un éditeur de ressources gratuit pour Windows

vendredi 28 juillet 2006 à 19:10:49 | Re : Testez le typename avec une classe utilisant les templates

steve_clamage

Oui la solution de amorosalain est trés bien, avec typeid c'est moins efficace car on perd l'avantage du fait que tout ca peut être résolu statiquement.

Mais pour éviter d'avoir un appel de ce type
T value = 0;
mastruct->type = GetTypeId(value);


j'aurais fait
template<typename T>
void maclasse<T>::SetValue(unsigned char & value)
{
   value = I_UCHAR;
}

SetValue(mastruct->type);

samedi 29 juillet 2006 à 09:16:17 | Re : Testez le typename avec une classe utilisant les templates

amorosalain



[size=6][b][i]SAM[/i][/b][/size=6]
effectivement, c'est encore mieux.

merci.

++
samedi 29 juillet 2006 à 09:32:25 | Re : Testez le typename avec une classe utilisant les templates

amorosalain



SAM

Non finallement, il y aura un soucis.
mastruct->type est toujours de type long.
C'est un long enregistré dans le header et qui indique le type des valeurs qui vont suivre dans le fichier.

car value, on s'en fiche, on veut juste tester son type et enregistrer le résultat dans un long.

++


Cette discussion est classée dans : classe, size, short, templates, typename


Répondre à ce message

Sujets en rapport avec ce message

Erreur de link en utilisant les templates [ par Wett ] Voila j'utilise VC++ 6 et j'ai créé une classe templates toute simple (en fait c une liste chainée :p), de la formedans le .h:template class ChainList Problème d'héritage de classes templates [ par emiaille ] Bonjour tout le monde,En ce moment je m'initie aux templates et j'ai donc créer une classe template matrix delaquelle je tire la classe vector par hér Visual Cpp [ par Bringdal ] Voila... mon probleme est simpleje n'arrive pas à afficher un executable j'ai ajouté une variable privé de type CXXXSocket ListBox dans une Vue [ par crocejf2000 ] Salut tout le monde,(OS : Win XP, Visual c++.net)J'ai une classe CMaVue qui dérive de la classe CView. A partir de CMaVue je veut afficher une listBox delais action [ par ready4 ] Bonjour,Je cherche a faire une action (5 instructions) répétée pendant 2500ms.Comment dois-je faire ca? Je sais que je dois utiliser la librairie time Matrice constante. [ par nsoualem ] j'ai crée une classe matrice avec un constructeurdu type:matrice(int nbligne,int nbcolonne)...elle marche a merveille!!!Lors de la création d'un code, incompatibilité 'std' et 'friend' [ par cabieces ] CABECOUJ'ai définit une fonction amie, celle ci doit donc pouvoir accéder aux champs privée de la classe. Ceci marche trés bien sauf quand la classe u lire fichiers xml [ par Franckyom50 ] Salut à tous Je voulais savoir : comment on peut faire pour lire un fichier xml, en Visual Cpp ? Merci d'avance à ceux qui me reponderont !Fr@nckyx< classe et agregation... [ par Clonk ] bonjour,j'utilise plusieurs classes ayant des agregations (sous Borland).Disons en gros que si on a :class personne{private:int age;public:void affich Nombres dans fichier .txt [ par Franckyom50 ] Salut à tous !J'aimerais savoir comment je peux récupérer une série de nombres qui se trouvent dans un fichier texte, sous cette forme :365221655236-2


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

Photothèque

A découvrir



 
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

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,624 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales