Bonjour à tous
Me revoici avec un question bizarre de métaprogrammation.
Pensez vous qu'il soit possible de parcourir un enum par le compilateur.
Ex: je souhaiterai connaitre la somme des éléments d'un enum.
Merci Mathieu
Version imprimable
Bonjour à tous
Me revoici avec un question bizarre de métaprogrammation.
Pensez vous qu'il soit possible de parcourir un enum par le compilateur.
Ex: je souhaiterai connaitre la somme des éléments d'un enum.
Merci Mathieu
Les enum se suivent non ?
Donc pas besoin de compilo.
Juste une formule avec les suites !
p= le nombre du debut des enum
n= le dernier nombre a la fin de l'enum
((n-p+1)*(n+p))/2 = la somme des nombres
:ccool:
Oui mais j insiste pour que le compilateur fasse cette opération
je prends comme enum
je souhaiterai également connaitre le cardinal de TYPE, la valeur du second élément. Tout ca par le compilateur.Code:
1
2 typedef enum{a=0,b=3,c=4} TYPE;
Mathieu
Jette un œil là-dessus.
Bon, il manque des choses, mais ça te fait une piste.Code:
1
2
3
4
5
6
7
8
9
10
11 class MyEnum { enum {a, b, c} pouet; static std::vector<pouet> foo; }; MyEnum::foo(a) = 0; MyEnum::foo(b) = 3; MyEnum::foo(c) = 4; size_t nbre_enum = MyEnum.foo.size();
Pas trop le temps de fournir une solution complète. :-)
Alors disons le autrement.
Je considèe un enum que je ne peux altérer
Comment connaitre son cardinal A LA COMPILATION, par exemple?
Merci
en effet il se peut qu'il n'y ait pas de réponse en C++
Si tu n'affectes pas de valeurs aux éléments de ton énum, tu peux faire:
La dernière valeur de l'enum est son "cardinal", c'est à dire le nb d'éléments qui la précède. C'est assez pratique, si tu insères une valeur au milieu, le compilateur renumérote, et tout fonctionne encore.Code:
1
2 enum {v1,v2,v3,nbval};
Francois