slt,
je recherche une fonction qui renvoie le type d'une variable???
Merci davance....
slt,
je recherche une fonction qui renvoie le type d'une variable???
Merci davance....
Bonjour,
Sous gcc il y a bien typeof mais il faudrait donner plus de précisions pour savoir si ça correspond au besoin.
Bonjour,
[MODE FANATIQUE ON]Ce n'est pas bien ![MODE FANATIQUE OFF]
Tu essaie sans doute d'enfreindre l'un de ces deux grands principes propres au C++ :
1. Le typage fort :
2. Un principe fondamental de l'orienté objet, à savoir qu'on ne doit surtout pas savoir quel est le type réel des pointeurs et références qu'on manipule à partir du moment où on est certain qu'il s'agit d'un descendant du type que l'on croit manipuler.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 int i =4; i = "toto"; // <<< INTERDIT EN C++
Ton problème n'est donc pas là où tu crois. Il est sans doute dans ton modèle de donnée.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 Forme& maForme = recupereforme(); if (maForme is typeof Carre) // <<< INTERDIT EN C++
[EDIT]Après, je n'ai pas dit que ce n'est pas possible, j'ai dit que ce n'est pas bien, et qu'à moins que tu sois en train de bidouiller un code vieux de 10 ans sur lequel tout refactoring est impossible, tu devrais essayer de résoudre ton vrai problème et non-pas celui pour lequel tu pose la question.
[TROLL]
Oui, je viens de dire que la reflexion (et donc le Java), c'est le mal.
J'assume.
[/TROLL]
[/EDIT]
Courage
dynamic_cast peut peut être t'aider.
Enfin, non, ça t'aidera pas parce que comme l'a dit Feriaman:
Mais bon, ça peut toujours servir à d'autre.Ton problème n'est donc pas là où tu crois. Il est sans doute dans ton modèle de donnée.
Sinon y'a la même sans les pointeurs qui throw un bad_cast exception.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 Panda* p = dynamic_cast<Panda*>(truc); if ( p != NULL ) // truc est un Panda en fait. else // truc etait pas un Panda :(
La perfection est atteinte, non pas lorsqu’il n’y a plus rien à ajouter, mais lorsqu’il n’y a plus rien à retirer. - Antoine de Saint-Exupéry
Il existe en C++ un mécanisme pour connaitre le type de classe utilisée en cours d'exécution, c'est le RTTI (Run-Time Type Information), il s'agit de type_info et type_id.
Stroustrup en parle Chapitre 15.4 3ième édition.
Type statique ou dynamique ? Informations sur les types (dynamiques et statiques) et conversions
Boost.Typeof
En C++0x, auto, decltype
Ressources proposées par 3DArchi - Les fonctions virtuelles en C++ - Cours et tutoriels C++ - FAQ C++ - Forum C++.
Je rejoins mes co-repondeur sur le fait qu'il existe des mécanismes que l'on peut utiliser pour connaitre un type.
Mais quand un débutant dans un projet naissant te demande : "comment connaitre le type d'une variable", c'est que son problème est ailleurs.
Par ailleurs, je pense qu'on est tous d'accord pour dire qu'il faut absolument éviter des choses comme ceci :
J'ai bossé 3 ans sur un projet professionnel dont l'architecture était basée sur les RTTI et sur ce type de "switch", je vous dit pas l'horreur que c'était.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 void methode (Forme& forme) { if (forme type of Carre) { /*dessine un Carré*/ } else if (forme type of Rond) { /*dessine un Rond*/ } else if (forme type of Triangle) { /*dessine un Triangle*/ } else if (forme type of Hexagone) { /*dessine un Hexagone*/ } else if (forme type of Potato) { /*dessine un Potato*/ } }
Alors peut-être que certaines rockstars de l'OO savent utiliser la reflexion et les typeof comme des pros sans nuire à leurs modèles, mais certainement pas un débutant.
Pour répondre à la question :
Je dirais :voila mon reel probleme:
dans dev-c++, j'ai ecrit une procedure qui dessine un tableau de n cases defini; ensuite l'utilisateur est invite a entrer des entiers dans chaque case du tableau, la procedure calcule la somme des elements du tableau et la lui renvoie. malheureusement par megarde, l'utilisateur peut plutot taper une lettre qui n'est pas un entier!!! je voudrai donc controler cela, afin que si ce n'est pas un entier qui entre, la procedure efface ce qu'il a entre et lui invite a reessayer.
je declare un tableau de caracteres et chaque fois qu'un caractere est lu, je teste si son type est entier; si ce n'est pas le cas, l'utilisateur doit recommencer.
comment dois je alors tester le type du caractere???
1. Un forum cela ne marche pas avec les MP. Cela marche avec les topics.
2. Il faut que tu comprenne ce que c'est qu'un "type". Et en particulier, il faut que tu comprennes la différence qu'il y a entre le type d'une variable et son contenu. Voici des exemples :
Si les 4 lignes ci-dessus ne sont pas claires, je te propose de relire le chapitre "variables" de ton cour de C++.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 int i = 4; // Ceci est un entier int i = 'a'; // ceci est aussi un entier std::string s1 = "toto"; //ceci est une chaine std::string s1 = "4"; //ceci est une chaine
Une fois que ce sera fait, je te propose de te renseigner sur
Code : Sélectionner tout - Visualiser dans une fenêtre à part std::istringstream
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager