Operateur "|" dans les parametres d'une fonction - C++ - Programmation
Marsh Posté le 19-10-2006 à 06:24:26
Ya méprise, le pipe '|' n'a rien à voir avec les fonctions variadiques (google: variadic functions).
Un horrible exemple avec la convention ANSI,
Code :
|
Marsh Posté le 19-10-2006 à 15:13:24
Finalement, j'ai trouve ce que je voulais. Je ne savais pas comment ca s'appelait, donc j'ai du etre mal compris. En tous cas merci.
Ca donne :
Un enum pour definir les flags :
Code :
|
Le constructeur de la classe (dans le hpp) :
Code :
|
Sa definition (dans le cpp) :
Code :
|
Marsh Posté le 19-10-2006 à 16:11:11
Heu... là je crois que tu risques d'avoir des soucis :
Citation :
|
Supposons que cela soit initialisé de telle sorte que :
NOMBRE_OBJETS = 1, |
Dans ce cas, tu as
Code :
|
...ça ne va pas être joli à voir...
Il suffit que tu fasses en sorte que chaque bit corresponde à un message
Marsh Posté le 19-10-2006 à 16:50:48
Merci pour l'info. Alors, je dois faire ca :
Code :
|
ou ca :
Code :
|
Comme ca, je dirai que c'est equivalent ... Non ?
Marsh Posté le 19-10-2006 à 16:53:17
Ce n'est pas équivalent car les define sont remplassés à la compilation par le compilateur, les enum non. Mais c'est vrai qu'en soit ça revient au même
Marsh Posté le 19-10-2006 à 17:09:52
Les enums sont par contre plus propres et plus sûr. Si un enum est remplacé par un int pour une raison x, y ou z, le compilo ralera. Sinon, faut checker au runtime si tu utilises des defines.
Utilise donc les enum sans oublier les '='
Marsh Posté le 19-10-2006 à 17:14:36
A ce stade de la compétition, il serait plus sage de s'en remettre à un bitfield (terme que je n'oserais traduire).
Code :
|
Marsh Posté le 19-10-2006 à 17:18:09
bb138 a écrit : Ce n'est pas équivalent car les define sont remplassés à la compilation par le compilateur, les enum non. Mais c'est vrai qu'en soit ça revient au même |
Bzzt. Les enums sont aussi des constantes à la compilation.
Marsh Posté le 19-10-2006 à 17:49:56
(Moi j'ose)
C'est vrai que les champs de bits ça fait joli (j'oublie toujours de les utiliser...)
Sinon désolé mais je ne savais pas pour les enum... Ils ne servent donc "qu'à" te signaler tes erreurs à la compilation si je comprend bien (là je suis peut être un peu réducteur).
Marsh Posté le 19-10-2006 à 17:57:05
Ca sert à ça, mais aussi à limiter un type personnel à un champ de valeur et donc une certaine cohérence.
Avec un define, rien ne t'empêche d'utiliser WM_PAINT à la place à la place de NOMBRE_OBJETS.
Ca n'a rien à voir, mais c'est syntaxiquement correct.
Donc, par sécurité, il faut utiliser les enum, ou le champ de bit comme l'a dit tbp.
Marsh Posté le 19-10-2006 à 18:42:46
Mais aussi,
Code :
|
Hulahup, barbatruc.
Code :
|
Marsh Posté le 19-10-2006 à 19:29:40
Oui, alors justement. Ca sert à autre chose qu'à faire un super "99 bottles of beer" ça?
(et c'est une question sérieuse )
Marsh Posté le 19-10-2006 à 22:33:40
C'est pratique pour génerer des constantes, dérouler des boucles etc... Mais on tombe vite dans l'usine à gaz aux erreurs de compilation taquines qui produit un binaire avec de l'embonpoint. Et puis on peut tjs se gratter pour manipuler des flottants par exemple.
Le mot d'ordre, je crois, c'est la parcimonie. http://spirit.sourceforge.net/
Marsh Posté le 19-10-2006 à 23:03:10
Merci pour la petite explication
Je pense toujours pas l'utiliser de sitôt cela-dit
Marsh Posté le 21-10-2006 à 00:47:51
tbp a écrit : C'est pratique pour génerer des constantes, dérouler des boucles etc... Mais on tombe vite dans l'usine à gaz aux erreurs de compilation taquines qui produit un binaire avec de l'embonpoint. Et puis on peut tjs se gratter pour manipuler des flottants par exemple. |
ou pas
http://forum.hardware.fr/hardwaref [...] 9976-1.htm
http://forum.hardware.fr/hardwaref [...] 9989-1.htm
bien coaché (avec des idiomes comme les typelist, les smart pointer et les traits), la meta-*prog tempalte fait des merveilles
Marsh Posté le 21-10-2006 à 04:09:57
Joel F a écrit : bien coaché (avec des idiomes comme les typelist, les smart pointer et les traits), la meta-*prog tempalte fait des merveilles |
La meta-prog c'est bien, en abuser ça craint.
Et ce n'est pas comme si qques ajustements du standard ne se faisaient pas languir, hein.
Marsh Posté le 21-10-2006 à 09:37:41
tbp a écrit : |
tbp a écrit : |
A qui le dit tu
export, auto , ou etes vous
Marsh Posté le 21-10-2006 à 12:58:59
Joel F a écrit : A qui le dit tu |
Je pense que tbp sous entendait : concepts.
l'inférence de type -- auto, decltype -- ça va figurer au menu de C++0X.
Quand à export, ben comme tu le sais, c'est au standard depuis 8 ans. Il n'y a à ce jour que certains compilateurs utilisant le front end EDG qui le propose (como, icc). Gcc est en train de préparer le terrain pour l'implémenter, et ça ne devrai plus être très long (surement juste avant 2009 quoi!)
Marsh Posté le 21-10-2006 à 20:54:57
++fab a écrit : Je pense que tbp sous entendait : concepts. |
oui oui ^^ aussi
Marsh Posté le 19-10-2006 à 01:42:29
Bonjour,
Je sais qu'il est possible de passer plusieurs parametres a une methode sans en donner a priori le nombre avec une syntaxe du genre :
Le probleme, c'est que je ne sais pas comment traiter, ni declarer ce genre de choses. Pourriez vous m'indiquer un lien ou m'aider a comprendre ce mecanisme ?
D'avance merci