Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
2948 connectés 

  FORUM HardWare.fr
  Programmation
  C++

  [C++]Test le type d'une var

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[C++]Test le type d'une var

n°727643
nightmare6​82
< >
Posté le 16-05-2004 à 22:47:13  profilanswer
 

Personne ne sais si il existe un fonction en C++ qui permettrait de trouver le type d'une var (je sais c'est un peut toordu de pas savoir le type d'un var mais dans mon cas je ne le sais pas)
 
faudrais que j'ais un if avec d'un cot"é un traitement pour les int long float double tet de l'aute pour une chaine déclarée :  

Code :
  1. std::string var2;

 
par exemple.
 
ou alors est ce que quelqu'un connait une instruction permettant d'afficher tout c'est type de la mêmme facon sans faire de dif
je voulais utiliser cout mais je ne sais aps quand est ce que je dois mettre .c_str() derière ma var étant donné que je ne sais pas kel est son type au oment du cout. d'où le test.

mood
Publicité
Posté le 16-05-2004 à 22:47:13  profilanswer
 

n°727646
Ace17
Posté le 16-05-2004 à 22:50:51  profilanswer
 

C'est quoi ta variable? Elle est déclarée ou, et comment? Son type c'est celui utilisé pour sa déclaration.
 
Et une fois que t'auras le type de ta variable, tu t'en serviras comment? un switch? :D


Message édité par Ace17 le 16-05-2004 à 22:51:52
n°727652
kadreg
profil: Utilisateur
Posté le 16-05-2004 à 22:59:03  profilanswer
 

Code :
  1. try {
  2.     throw (maVariable);
  3. } catch (int i) {
  4.     // traitement pour un int
  5. } catch (float f) {
  6.     // traitement pour un float
  7. }


 
 :whistle:


---------------
brisez les rêves des gens, il en restera toujours quelque chose...  -- laissez moi troller sur discu !
n°727654
Taz
bisounours-codeur
Posté le 16-05-2004 à 23:02:50  profilanswer
 

n'importe quoi ... non mais c'est quoi ce bordel ? si tu mets quelque chose dans une chaine à l'instant t, à t+1 tu dois être capable de savoir ce que t'y avais mis
 
y en a marre de ces bleus-bites qui débarquent, et veulent te réinventer le polymorphisme et les enum à coup de string :o

n°727655
schnapsman​n
Zaford Beeblefect
Posté le 16-05-2004 à 23:04:00  profilanswer
 

Taz a écrit :


y en a marre de ces bleus-bites qui débarquent, et veulent te réinventer le polymorphisme et les enum à coup de string :o


ça dérive dur là [:meganne]


---------------
From now on, you will speak only when spoken to, and the first and last words out of your filthy sewers will be "Sir!"
n°727658
nightmare6​82
< >
Posté le 16-05-2004 à 23:08:37  profilanswer
 

Ace17 a écrit :

C'est quoi ta variable? Elle est déclarée ou, et comment? Son type c'est celui utilisé pour sa déclaration.
 
Et une fois que t'auras le type de ta variable, tu t'en serviras comment? un switch? :D


 
En faite à la base c'est n programme qui prend un language (le basic) et doit le convertir en c, donc le prob c que je traduit ligne par ligne, donc je n'ais plus la déclaration quand je veux faire l'affichage quand je traduit la commande d'affichage je dois donc prévoir els deux manières.
 
 :pt1cable:
 
Edit : Et pour foutre enore un peut plus le souk, c'est une interface en VB qui envois ligne par ligne le code en Basic à une DLL en C++ qui traduit cette ligne en C++ et la met dans un fichier qui sera compilé linké et executer à la fin.


Message édité par nightmare682 le 16-05-2004 à 23:11:29
n°727662
Taz
bisounours-codeur
Posté le 16-05-2004 à 23:10:56  profilanswer
 

utilise flex :o
même en première année on avait bricolé un analyseur syntaxique pour pascal et c'était mieux foutu que ton truc

n°727699
Ace17
Posté le 16-05-2004 à 23:39:43  profilanswer
 

Dis moi Nightmare t'aurais pas commencé par le php toi?
Car ce que tu demandes n'a pas de sens.
Comment est créée la variable dont tu désires connaitre le type?

n°727703
nightmare6​82
< >
Posté le 16-05-2004 à 23:44:24  profilanswer
 

Ben lis l'expliquation, je vérifi du code dans un certain language et je n'ais que ligne par ligne et je dois la traduire en C++
 
donc si j'ais une ligne :  print var
 
je doit par exemle écrire dans le fichier cout << var << endl;
 
mtn le prob c'est que suivant le type de variable cout ne fonctionne pas, donc je doit écrire pour print var un test qui vérifie le type avant de faire le cout.
 
Pour qu'au moment ou j'exécute le fichier que le programme à créé il puisse faire le bon affichage suivant le type de la variable.


Message édité par nightmare682 le 16-05-2004 à 23:45:18
n°727711
Taz
bisounours-codeur
Posté le 16-05-2004 à 23:48:14  profilanswer
 

Taz a écrit :

y en a marre de ces bleus-bites qui débarquent, et veulent te réinventer le polymorphisme et les enum à coup de string :o

mood
Publicité
Posté le 16-05-2004 à 23:48:14  profilanswer
 

n°727713
burgergold
5$? va chez l'diable!
Posté le 16-05-2004 à 23:48:23  profilanswer
 

moi avant de me lancer sur ton truc j'analyserais le tout un peu plus
 
tu risques de toucher plusieurs problème si tu fais que lire ligne par ligne et tenter de traduire en c++


---------------
http://www.boincstats.com/signature/user_664861.gif
n°727715
nightmare6​82
&lt; &gt;
Posté le 16-05-2004 à 23:49:45  profilanswer
 

Oué mais j'ais pas le choi au depart de faire ligne par ligne, il me reste ce prob là en faite (jais pas toutes les instruction à traduie non plus seulement quelues une)
 
en gros il me faudrait une fonction dans le genre de is_integer en php


Message édité par nightmare682 le 16-05-2004 à 23:49:58
n°727720
cris56
Posté le 16-05-2004 à 23:58:37  profilanswer
 

pourquoi il te faut une fonction is_integer ?

n°727725
nightmare6​82
&lt; &gt;
Posté le 17-05-2004 à 00:03:33  profilanswer
 

ben comme expliqué au dessu c'est pour un pgm qui traduit un language vers du c et je n'ais les ligne que une par une, donc je ne connais pas le type de la variable utilisée dans par exemple la commande print que je dois convertir en cout.

n°727727
cris56
Posté le 17-05-2004 à 00:06:43  profilanswer
 

mais justement, pourquoi tu aurrai besoin de savoir si c'est un entier? en quoi ton cout serait different?

n°727731
Taz
bisounours-codeur
Posté le 17-05-2004 à 00:13:55  profilanswer
 

mai arrêter, on est sur un cas parfait de polymorphisme là

n°727733
nightmare6​82
&lt; &gt;
Posté le 17-05-2004 à 00:20:07  profilanswer
 

cris56 a écrit :

mais justement, pourquoi tu aurrai besoin de savoir si c'est un entier? en quoi ton cout serait different?


 
Ben en faite j'avais le prob pour la copie d'une var dans une autre, donc j'ais utilisé un autre type pour les chaine de car et leproblème c'est que mtn il faut que je fasses mon cout autrement, je n'ais fait que déplacer le prob à la place de le résoudre.

n°727748
nightmare6​82
&lt; &gt;
Posté le 17-05-2004 à 00:32:59  profilanswer
 

Taz a écrit :

mai arrêter, on est sur un cas parfait de polymorphisme là


 
Je sais ça fait 3heure que tu le dit mais THX
 

Code :
  1. class Var
  2. {
  3. private:
  4. public :
  5. affiche();
  6. affiche(int);
  7. affiche(long int);
  8. affiche(float);
  9. affiche(double);
  10. affiche(std::string);
  11. };
  12. affiche(int var)
  13. {
  14.  cout << var;
  15. };
  16. affiche(long int var)
  17. {
  18.  cout << var;
  19. };
  20. affiche(float var)
  21. {
  22.  cout << var;
  23. };
  24. affiche(double var)
  25.  {
  26.  cout << var;
  27. };
  28. affiche(std::string var)
  29.  {
  30.  cout << var.c_str();
  31. };


 
peut importe le type de var affiche var me l'affiche correctement.

n°727794
Taz
bisounours-codeur
Posté le 17-05-2004 à 01:35:44  profilanswer
 

[:rofl]
 
1) t'as pas de polymorphisme là
2) de l'intétrêt d'avoir un template pour pouvoir le planquer derrière des fonctions à la C ...
3) affiche(std::string var)
    {
      cout << var.c_str();
 
dis que t'as pas fait exprès là ...
 
 
merci d'avoir fait une classe, c'était trop facile de faire
std::cout << quelque_chose ...
 
 
y a pas à dire t'es vraiment mauvais. j'ai beau me répéter, tu ne peux pas comprendre puisque tu ne sais ni ce qu'est le polymorhpisme, ni ce qu'est une union, encore moins un template ...

n°727795
burgergold
5$? va chez l'diable!
Posté le 17-05-2004 à 01:37:14  profilanswer
 

toujours aussi cruel ce taz :D


---------------
http://www.boincstats.com/signature/user_664861.gif
n°727799
nightmare6​82
&lt; &gt;
Posté le 17-05-2004 à 01:50:40  profilanswer
 

oué mais bon quand tu as parlé de polymorphisme j'ais pensé à classe et j'ais pensé que ça pouvait aller comme ça.

n°727803
Taz
bisounours-codeur
Posté le 17-05-2004 à 02:08:40  profilanswer
 

sauf que tu ne sais pas ce qu'est le polymorphisme

n°727990
Ace17
Posté le 17-05-2004 à 10:34:16  profilanswer
 

MDR la classe qui sert a rien!!!! [:rofl][:rofl][:rofl]
 
Nightmare, t'as pas compris que tu vas buter a un autre endroit??? Il y a un probleme beaucoup plus profond dans ton histoire, et tu n'en vois que le surface!
Choisis la pilule bleue et tout s'arrete... on te laisse avec ta pseudo-classe et ton probleme...
Choisis la pilule rouge et on descend au fond du gouffre, et tu commences par me donner un exemple de comment tu utilises Var::affiche.

n°731944
iliko
Posté le 19-05-2004 à 18:42:08  profilanswer
 

nightmare682 a écrit :

c'est n programme qui prend un language (le basic) et doit le convertir en c, donc le prob c que je traduit ligne par ligne, donc je n'ais plus la déclaration quand je veux faire l'affichage  


 
Ton but est de faire un parser. C'est une "initiation" a la compilation. J'vais t'expliquer pourquoi, vu comme tu pars, ta solution va devenir indémer... Sauf si vrament les programmes basic a parser sont d'une simplicité enfantine. Mais j'en doute!
 
Si tu faisais les choses proprement, voila la conception :
1) un parser qui prend le fichier en entré et construit une    
   représentation interne (objets C++) a partir de l'analyse lexical  
   et syntaxique.
2) Une fois la représentation "interne" construite, tu la traduits
 
Concrétement, pour "int maVar", le parser va reconnaitre  
une déclaration (je simplifie) :

[g]declaration : type identifiant
type :  INT | FLOAT
identifiant : <[a-z]+>
INT : "int"
FLOAT : "float"[/g]


 
qui se lit : une déclaration, c'est un type suivi d'un identifiant. Un type c'est "int" ou "float". Un identifiant, c'est au moins une lettre (j'ai simplifié).
Maintenant, a chaque fois que tu rencontres ces séquences, tu construits la représentation interne :

type : INT | FLOAT
{
  // on echappe pas au "if"  
  if( type == INT ) then  
    leType = new ClassInt();
  else
     leType = new ClassFloat();
}
declaration : type identifiant
{
  laDeclaration = new(Declaration, leType, l_identifiant);
}


 
Maintenat que tu as la representation interne, il faut traduire.
C'est simple : cout << laDeclaration
 
Il existe de nombreux programmes qui font tout le travail
de reconnaissance grammatical. Il te suffit de rentrer la grammaire
(comme ds l'exemple), les actions associées et il te genere tout le code C/C++. C'est comme
les generateurs d'interfaces graphiques : tu "dessines" ta fenetre et tu écris le code des callback. Le generateur s'occupe du reste.
Je connais des parsers pour UNIX (une version windows existe peut etre) : lex et yacc pour le C, flex et bison pour le C++. Une FAQ "compilation" te renseignera mieux pour tes besoins.
 
                       ==============================
 
Maintenant pourquoi tu t'embarques dans un merdié++
A priori, ce que tu fais semble plus simple que ce que je t'ai proposé. Le problème (et tu t'en aperçois déjà), c'est que ça devient ingérable. Tu peux pas traduire en mots a mots. On a une grammaire en face de nous, pas une simple suite de mots.
 
Donc a moins que tes programmes basic soient simplissimes ou toujours battis de la meme façon, je ne vois pas d'autres façon de faire que celle dont j'ai parlé.
 
Bon courrage.  :hello:

n°731947
Joel F
Real men use unique_ptr
Posté le 19-05-2004 à 18:45:34  profilanswer
 

flexx et bison existe sur Widnows je confirme :jap:

mood
Publicité
Posté le   profilanswer
 


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C++

  [C++]Test le type d'une var

 

Sujets relatifs
[langage C] Créer un logiciel client/serveur type ftp sous Linuxpb avec les input de type file
[ PHP ] sort() ne sait-il pas trier ? + test de mon site...Recherche de string ds un bloc mémoire sans type
[HTML/JS] Cherche un script pour faire ce type de diaporama...quel type de donnes utilise dans ce cas ?
changement du type de donnéesProblème de sélection avec VB pour calculer l'écart type
[c++] probleme de comparaison de type d'objets derivés[JS] Type de variable [RESOLU]
Plus de sujets relatifs à : [C++]Test le type d'une var


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR