BOOST_PP : concatener un caractère spécial

BOOST_PP : concatener un caractère spécial - C++ - Programmation

Marsh Posté le 01-12-2009 à 18:57:01    

J'utilise beaucoup BOOST_PP pour faire notamment  ma gestion des enums et leurs conversions en chaines de caracteres.
Cependant, je cherche à concatener une séquence de ce genre : a = 3 (pour l'exemple  :o )
 
A priori je ferai :
 

Code :
  1. BOOST_PP_CAT(BOOST_PP_CAT(SOME_VALUESF,=),1)


 
Cela ne fonctionne pas, le caractère = est incompris par le preprocesseur (en fait aucun des caractères spéciaux ne passe). À noter que si je remplace le caractère = par un _ celà fonctionne (mais ça ne fait pas du tout ce que je veux !)
 
Comment fait-on pour faire copier des caractères spéciaux ?  
Merci.


---------------
Un blog qu'il est bien
Reply

Marsh Posté le 01-12-2009 à 18:57:01   

Reply

Marsh Posté le 01-12-2009 à 19:45:04    

Si le résultat n'est pas un pptoken valide -- comme c'est vraisemblablement le cas -- toutes tes tentatives sont probablement vouées à l'échec (mais bon, sans savoir ce que tu veux faire, on peut toujours se tromper).


---------------
The truth is rarely pure and never simple (Oscar Wilde)
Reply

Marsh Posté le 01-12-2009 à 20:10:25    

Un Programmeur a écrit :

Si le résultat n'est pas un pptoken valide -- comme c'est vraisemblablement le cas -- toutes tes tentatives sont probablement vouées à l'échec (mais bon, sans savoir ce que tu veux faire, on peut toujours se tromper).


A faire une liste de flags. Faire ca en preprocessor :

 

E_FIRST = 1, E_SECOND = 2, E_THIRD = 4, E_FOURTH = 8

 

Il est aisé de faire : E_FIRST, E_SECOND, E_THIRD avec BOOST_PP_ENUM( SEQ ), on peut aussi faire des assignations avec BOOST_PP_ENUM_PARAMS mais je voudrais une assignation qui augmente de façon exponentielle... Autant l'exponentielle est faisable, autant je n'ai pas trouvé de solutions avec BOOST_PP_ENUM_PARAMS donc je cherce à faire la mienne...

 

Je sais pas si c'est clair  :o


Message édité par guepe le 01-12-2009 à 20:11:03

---------------
Un blog qu'il est bien
Reply

Marsh Posté le 01-12-2009 à 20:56:22    

Il ne faut rien concaténer,...

Code :
  1. #include <boost/preprocessor/seq.hpp>
  2. #include <boost/preprocessor/repetition.hpp>
  3. #include <boost/preprocessor/arithmetic/sub.hpp>
  4. #include <boost/preprocessor/punctuation/comma_if.hpp>
  5. #define FLAG_GEN_HELPER(z,n,sym) BOOST_PP_SEQ_ELEM(n,sym) = 1 << n BOOST_PP_COMMA_IF(BOOST_PP_SUB(BOOST_PP_SUB(BOOST_PP_SEQ_SIZE(sym),n),1))
  6. #define FLAG_GEN(symbols) BOOST_PP_REPEAT(BOOST_PP_SEQ_SIZE(symbols),FLAG_GEN_HELPER,symbols)
  7. FLAG_GEN((s1)(s2)(s3))


 


---------------
The truth is rarely pure and never simple (Oscar Wilde)
Reply

Marsh Posté le 01-12-2009 à 21:00:52    

Punaise voila une solution simple et claire : /me retourne apprendre à coder je crois  :(  
 
Merci, je découvre la programmation preprocesseur   :sweat:


---------------
Un blog qu'il est bien
Reply

Sujets relatifs:

Leave a Replay

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