bonjour tous le monde
est ce qu'il est possible de tester si une valeur appartient à un type enumeratif ?
Version imprimable
bonjour tous le monde
est ce qu'il est possible de tester si une valeur appartient à un type enumeratif ?
personnellement je connais la fonction isnan (is not a numbre) :
http://www.linux-france.org/article/man-fr/man3/isnan-3.html
Je sais pas si ca t'aide mais bon !
merci,mais je veux dire par type numerique par exemple ca
Code:
1
2
3
4
5 enum typ { lundi,mardi,mercredi };
C'est donc pas un type numerique mais ENUMERE ;)
Donc dans ce cas la je ne peux t'aider desole
Généralement on ne peut pas le faire. Cependant ce qu'on peut faire est le suivant:
Mais cela ne marche seulement si to ne donne pas de valeurs numérique toi-même au valeurs énumérées.Code:
1
2
3
4
5
6
7
8
9
10 enum Foo { min, a,b,c,d,e,f,g, max; }; bool isfoo(Foo foo) { return min<foo && foo<max; }
Si tu peux ...
Va voir http://www.developpez.net/forums/viewtopic.php?t=317466
Là je ne vois pas vraiment ce que tu veux dire... Dans le lien que tu a posté tu ne montre pas vraiment comment on peut dire si une valeur appartient à un type énuméré ou non. Bon on peut bien sûr toujours la comparée à chaque valeurs du type mais je suis qu'ici une solution un peu plus flexible est demandée.
Cela n'a pas de sens.
Avec
toto est dans l'énuméré et tata n'y est pas.Code:enum { toto, titi };
Tout cela est résolu à la compilation.
Il faudrait que tu sois plus explicite par rapport ton problème exact.
bonjour,j'ai plusieurs valeurs dans la type enumeratif et donc je ne veux pas tester si une valeur appartient pour tous les valeurs
est ce qu'il y aune methode plus simple?
Salut,
je pense que il ou elle veut savoir si par exemple "tata" fait parti de l'énumération :
Son problème me fait penser aux tables de hashage qui assignent à une clé une valeur (cf. les map).Code:
1
2
3
4
5 // dans ce cas non enum { toto, titi }; // dans ce cas oui enum { toto, titi, tata };
Mais ça n'a rien a voir avec les enum.
A+.
Flo.
ce post part dans tous les sens... explique plus clairement ton problème, avec du code, si possible.
autrement
verifie que x appartient au vecteur vCode:
1
2 std::binary_search(v.begin(),v.end(),x);
au lieu du vecteur v j'ai
enum typ
{
a,b,c,d
};
et je veux tester que x appartient à typ
tu as donc une valeur numérique et tu veux savoir si cette valeur est une des valeur défini dans ton enum sans utiliser les identifiants de l'enumérateur ?
ex :comment faire pour savoir si "test" est défini dans l'enum ?Code:
1
2 enum UnEnum { a, b, c, d }; int test = 4;
eh bien, à moins d'utiliser les Min/Max comme l'a montré ben04, je ne vois pas... de toute façon, ce n'est pas très propre : ce ne sont pas les mêmes types.
Juste pour le fun, et pour les fans du préprocesseur :
Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 #define ENUM_BODY(name, value) \ name = value, #define ENUM_CASE(name, value) \ case name : return true; #define DEFINE_ENUM(name, values) \ enum name { \ values(ENUM_BODY) \ }; \ inline bool value_in_##name(int x) \ { \ switch (x) { \ values(ENUM_CASE) \ default : return false; \ } \ }
:DCode:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 #define VALUES(_) \ _(a, 1) \ _(b, 3) \ _(c, 5) \ _(d, 24) DEFINE_ENUM(MyEnum, VALUES) int main() { cout << "1 : " << boolalpha << value_in_MyEnum(1) << endl; cout << "2 : " << boolalpha << value_in_MyEnum(2) << endl; cout << "5 : " << boolalpha << value_in_MyEnum(5) << endl; return 0; }
C'est quoi "boolalpha" ?
Flo.
C'est pour afficher "true" ou "false" au lieu de "1" ou "0".Citation:
Envoyé par Flo.
...chose que tu aurais pu trouver simplement en essayant, ou avec Google :D.
merci mais quand j'ai compile il me fait sortir des erreurs
je ne sais pas trop sur le preprocesseur
Il y avait un "\" de trop dans mon code. A part ça, ce serait mieux si tu nous donnait ces erreurs, on ne peut pas les deviner.
J'ai donné ce code pour le fun, personnellement je ne sais pas si j'utiliserais ce genre de mécanisme. Enfin à toi de voir.
voici les erreurs
vous avez ditCitation:
main2.cpp
main2.cpp(11) : error C2501: 'name' : missing storage-class or type specifiers
main2.cpp(11) : error C2065: 'value' : undeclared identifier
main2.cpp(14) : error C2059: syntax error : 'case'
main2.cpp(14) : error C2059: syntax error : 'return'
main2.cpp(17) : error C2017: illegal escape sequence
main2.cpp(18) : error C2143: syntax error : missing '}' before '('
main2.cpp(18) : fatal error C1903: unable to recover from previous error(s); stopping compilation
---------------------- Done ----------------------
Build: 0 succeeded, 1 failed, 0 skipped
lequelle ?Citation:
Il y avait un "\" de trop dans mon code. A part ça, ce serait mieux si tu nous donnait ces erreurs, on ne peut pas les deviner
J'ai corrigé le code dans mon post précédent.
Tes erreurs semblent venir de plus haut, tu es sûr d'avoir bien repris le code ?
oui est ce que je doit ajouter des includes ??
Non. Le code que j'ai donné compile tel quel.
et pourtant ca ne compile pas :?: :roll:
Quel est ton compilo ? Tu es sûr d'avoir bien copié / collé ?
oui,microsoft visual studio .Net 2003
Code complet compilant sous VS.NET 2003
Mais bon, es-tu bien sûr de vouloir utiliser ce genre de bidouille ?Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37 #include <iostream> using namespace std; #define ENUM_BODY(name, value) \ name = value, #define ENUM_CASE(name, value) \ case name : return true; #define DEFINE_ENUM(name, values) \ enum name { \ values(ENUM_BODY) \ }; \ inline bool value_in_##name(int x) \ { \ switch (x) { \ values(ENUM_CASE) \ default : return false; \ } \ } #define VALUES(_) \ _(a, 1) \ _(b, 3) \ _(c, 5) \ _(d, 24) DEFINE_ENUM(MyEnum, VALUES) int main() { cout << "1 : " << boolalpha << value_in_MyEnum(1) << endl; cout << "2 : " << boolalpha << value_in_MyEnum(2) << endl; cout << "5 : " << boolalpha << value_in_MyEnum(5) << endl; return 0; }
bon merci en tout cas mais ca compile pas
c'est pas la peine que je fais ca
by 8O
Faire des passages entier -> enum n'est pas toujours très utile (/ nécessaire).
Tu n'as toujours pas répondu à ma question (pas forcément claire il est vrai). Quel est le problème que tu veux résoudre ? (Problème que tu penses pouvoir traiter avec des enums). Je ne cherche pas à savoir ce que tu veux faire avec des enums, mais ce que tu veux faire ... d'un point de vu plus haut niveau si je puis dire.
(Pour les macros ... je préfère encore jouer avec Perl et make ; on doit pouvoir s'en sortir pour générer plus de choses à commencer par les tables pour les conversions enum <-> texte)