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

  FORUM HardWare.fr
  Programmation
  C++

  paramètre template constant et type sous jacent d'enum

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

paramètre template constant et type sous jacent d'enum

n°1170498
++fab
victime du syndrome IH
Posté le 05-08-2005 à 11:13:01  profilanswer
 

Bonjour,
 
petite question : je cherche à "typifier" un enum. Probleme évident, on ne connais pas le type sous-jacent :/
 

Code :
  1. #define TYPIFY(enumVal, typeVal)\
  2. template <__typeof__(enumVal) N>\
  3. struct typeVal\
  4. {\
  5.     enum { value = N };\
  6. }
  7. enum Enum { FOO, BAR };
  8. TYPIFY(FOO, Wfoo);


 
L'extension typeof ne passe pas comme parametre template constant (du moins sous le gcc périmé que j'ai sous la main), y a t'il une issue propre ? si non, decltype sera-t'il le sauveur ?

mood
Publicité
Posté le 05-08-2005 à 11:13:01  profilanswer
 

n°1170509
theshockwa​ve
I work at a firm named Koslow
Posté le 05-08-2005 à 11:20:07  profilanswer
 

et à quoi est censé servir ce genre de pirouette ? (Pourquoi ne pas passer tout simplement par une valeur entière à la place de ton __typeof__(enumVal) ?)
 
Edit : en fait, j'ai carrément du mal à voir pourquoi tu peux avoir besoin de template dans ce cas :D


Message édité par theshockwave le 05-08-2005 à 11:21:27
n°1170516
++fab
victime du syndrome IH
Posté le 05-08-2005 à 11:26:21  profilanswer
 

ben tu vois bien, a typifier n'importe quel enum, avec n'importe quel type sous sous-jacent.
 
une valeur entière ? [:sinking]

n°1170518
++fab
victime du syndrome IH
Posté le 05-08-2005 à 11:30:00  profilanswer
 

en fait j'ai besoin de conserver la valeur de l'enum, d'ou le template.

n°1170526
++fab
victime du syndrome IH
Posté le 05-08-2005 à 11:36:08  profilanswer
 

en meme temps, c'est la fleme de mettre un troisieme paramètre dans la macro :o Juste pour une once d'élégance quoi.

n°1170540
++fab
victime du syndrome IH
Posté le 05-08-2005 à 11:50:01  profilanswer
 

Attendez, reflechissez pas a ma boue, je vais éditer, j'ai mélanger deux trucs la ...

n°1170553
theshockwa​ve
I work at a firm named Koslow
Posté le 05-08-2005 à 12:04:28  profilanswer
 

++fab a écrit :

Attendez, reflechissez pas a ma boue, je vais éditer, j'ai mélanger deux trucs la ...


ok [:petrus75]

n°1170569
chrisbk
-
Posté le 05-08-2005 à 12:19:47  profilanswer
 

rien compris [:pingouino]

n°1170826
++fab
victime du syndrome IH
Posté le 05-08-2005 à 16:27:07  profilanswer
 

ça y est, en fait je ne m'étais pas trop vautré. Ce code compile avec gcc 3.4.4, et supérieur, mais pas 3.2.3. Entre les deux, j'ai pas essayé. ça dit quoi sous visual ? sous icc ?  
Par contre, l'intéret est plutot limité, enfin je vais essayer de lui en trouver un :)
 

Code :
  1. #include <iostream>
  2. #define TYPIFY(enumVal, enumType)\
  3. template <__typeof__(enumVal) N>\
  4. struct Enum_\
  5. {\
  6.     enum { value = N };\
  7. };\
  8. typedef Enum_<enumVal> enumType
  9. enum { FOO = 300, BAR };
  10. TYPIFY(FOO, Wfoo);
  11. int main()
  12. {
  13.     Wfoo foo;
  14.     std::cout << foo.value << '\n';
  15. }


 

n°1170833
theshockwa​ve
I work at a firm named Koslow
Posté le 05-08-2005 à 16:35:57  profilanswer
 

VS .NET 2003 ne connait pas __typeof__
 
 
Edit : en revanche, si je fais ca :

Code :
  1. #include <iostream>
  2. #define TYPIFY(enumVal, enumType)\
  3. template <unsigned int N>\
  4. struct Enum_\
  5. {\
  6.     enum { value = N };\
  7. };\
  8. typedef Enum_<enumVal> enumType
  9. enum { FOO = 300, BAR };
  10. TYPIFY(FOO, Wfoo);
  11. int main()
  12. {
  13.     Wfoo foo;
  14.     std::cout << foo.value << '\n';
  15. }


 
ca fonctionne très bien (d'où ma suggestion d'utiliser un entier)


Message édité par theshockwave le 05-08-2005 à 16:37:27
mood
Publicité
Posté le 05-08-2005 à 16:35:57  profilanswer
 

n°1170834
++fab
victime du syndrome IH
Posté le 05-08-2005 à 16:36:41  profilanswer
 

__typeof

n°1170839
theshockwa​ve
I work at a firm named Koslow
Posté le 05-08-2005 à 16:38:45  profilanswer
 

c'est en C++ managed, __typeof :)

n°1170840
++fab
victime du syndrome IH
Posté le 05-08-2005 à 16:39:30  profilanswer
 

et si le "underlying type" de l'enum est de type int, et négatif ?

n°1170842
++fab
victime du syndrome IH
Posté le 05-08-2005 à 16:40:33  profilanswer
 

theshockwave a écrit :

c'est en C++ managed, __typeof :)


 
C'est une extension ... qui vaut ce qu'elle vaut.

n°1170845
theshockwa​ve
I work at a firm named Koslow
Posté le 05-08-2005 à 16:43:10  profilanswer
 

contre toute attente, ceci :

Code :
  1. #include <iostream>
  2. #define TYPIFY(enumVal, enumType)\
  3. template <unsigned int N>\
  4. struct Enum_\
  5. {\
  6.     enum { value = N };\
  7. };\
  8. typedef Enum_<enumVal> enumType
  9. enum { FOO = -300, BAR };
  10. TYPIFY(FOO, Wfoo);
  11. int main()
  12. {
  13.     Wfoo foo;
  14.     std::cout << foo.value << '\n';
  15. }


 
affiche "-300" :heink:

n°1170848
theshockwa​ve
I work at a firm named Koslow
Posté le 05-08-2005 à 16:46:27  profilanswer
 

++fab a écrit :

C'est une extension ... qui vaut ce qu'elle vaut.


c'est seulement pour .Net, hein ... donc niveau "extension", c'est pas terrible, je parlerais plutôt d'une branche du langage qui se forme :/

n°1170849
++fab
victime du syndrome IH
Posté le 05-08-2005 à 16:46:50  profilanswer
 

Citation :

affiche "-300" :heink:


 
au feu les pompiers ?


Message édité par ++fab le 05-08-2005 à 16:47:41
n°1170860
theshockwa​ve
I work at a firm named Koslow
Posté le 05-08-2005 à 17:00:00  profilanswer
 

mingw32 me dit "4294966996", ca me rassure :D

n°1170861
++fab
victime du syndrome IH
Posté le 05-08-2005 à 17:01:02  profilanswer
 

Chez moi ça plante, ça renvoie un grand nombre. Trick réussi donc :)
 
ça doit etre un bug si ça marche ...

n°1170862
theshockwa​ve
I work at a firm named Koslow
Posté le 05-08-2005 à 17:03:04  profilanswer
 

si quoi marche ? [:petrus75]

n°1170863
++fab
victime du syndrome IH
Posté le 05-08-2005 à 17:03:45  profilanswer
 

ta version unsigned int crenon :o

n°1170865
theshockwa​ve
I work at a firm named Koslow
Posté le 05-08-2005 à 17:04:28  profilanswer
 

ah, oui, évidemment que c'est anormal :D

n°1170867
++fab
victime du syndrome IH
Posté le 05-08-2005 à 17:05:51  profilanswer
 

VS sux :D

n°1170868
++fab
victime du syndrome IH
Posté le 05-08-2005 à 17:07:54  profilanswer
 

tu m'a pas dit si ça fonctionnait avec __typeof sous VS (Managed) ?

n°1170877
theshockwa​ve
I work at a firm named Koslow
Posté le 05-08-2005 à 17:11:45  profilanswer
 

j'ai pas le temps de faire un proj managed pour ca :D (je suis au taf, j'ai utilisé mon proj habituel pour tester n'importe quoi pour faire ces tests à, mais sinon, je n'aurais pas pris le temps)

n°1170879
theshockwa​ve
I work at a firm named Koslow
Posté le 05-08-2005 à 17:12:28  profilanswer
 


n'empêche que pour ce que tu veux faire, c'est diablement pratique, ce bug :p

mood
Publicité
Posté le   profilanswer
 


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

  paramètre template constant et type sous jacent d'enum

 

Sujets relatifs
[Résolu] Menu type onglets en CSSTest de présence de paramètre de type '&1' en SQL
Probléme avec les input de type password sous FF[PHP - MySQL] Récupérer choix d'un "enum" dans BDD
Effacer un répertoire avec la structure Public Type SHFILEOPSTRUCTprobleme avec le input type="radio"
postgres et type serial ??RESOLU[VBA] Ouverture d'un formulaire avec paramètre
bcp et paramètre 
Plus de sujets relatifs à : paramètre template constant et type sous jacent d'enum


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