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

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

Marsh Posté le 16-05-2004 à 22:47:13    

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.

Reply

Marsh Posté le 16-05-2004 à 22:47:13   

Reply

Marsh Posté le 16-05-2004 à 22:50:51    

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
Reply

Marsh Posté le 16-05-2004 à 22:59:03    

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

Marsh Posté le 16-05-2004 à 23:02:50    

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

Reply

Marsh Posté le 16-05-2004 à 23:04:00    

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

Marsh Posté le 16-05-2004 à 23:08:37    

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
Reply

Marsh Posté le 16-05-2004 à 23:10:56    

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

Reply

Marsh Posté le 16-05-2004 à 23:39:43    

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?

Reply

Marsh Posté le 16-05-2004 à 23:44:24    

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
Reply

Marsh Posté le 16-05-2004 à 23:48:14    

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

Reply

Marsh Posté le 16-05-2004 à 23:48:14   

Reply

Marsh Posté le 16-05-2004 à 23:48:23    

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
Reply

Marsh Posté le 16-05-2004 à 23:49:45    

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
Reply

Marsh Posté le 16-05-2004 à 23:58:37    

pourquoi il te faut une fonction is_integer ?

Reply

Marsh Posté le 17-05-2004 à 00:03:33    

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.

Reply

Marsh Posté le 17-05-2004 à 00:06:43    

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

Reply

Marsh Posté le 17-05-2004 à 00:13:55    

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

Reply

Marsh Posté le 17-05-2004 à 00:20:07    

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.

Reply

Marsh Posté le 17-05-2004 à 00:32:59    

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.

Reply

Marsh Posté le 17-05-2004 à 01:35:44    

[: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 ...

Reply

Marsh Posté le 17-05-2004 à 01:37:14    

toujours aussi cruel ce taz :D


---------------
http://www.boincstats.com/signature/user_664861.gif
Reply

Marsh Posté le 17-05-2004 à 01:50:40    

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

Reply

Marsh Posté le 17-05-2004 à 02:08:40    

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

Reply

Marsh Posté le 17-05-2004 à 10:34:16    

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.

Reply

Marsh Posté le 19-05-2004 à 18:42:08    

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:

Reply

Marsh Posté le 19-05-2004 à 18:45:34    

flexx et bison existe sur Widnows je confirme :jap:

Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed