J'essaye de générer des operateurs pour ma lib d'algèbre linéaire avec Boost.Preprocessor et ca marche pas.
En detail, voici le code:
En générant mes operateurs pour un vec2 (par exemple) de la facon suivante
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21 #define GEN_ALGEBRAIC_OPS_REP_MACRO(z, n, param) \ BOOST_PP_TUPLE_ELEM(2, 0, param) \ BOOST_PP_CAT(OPERATOR, \ BOOST_PP_ARRAY_ELEM(n, \ BOOST_PP_TUPLE_ELEM(2, 1, param) \ ) \ ) \ (const BOOST_PP_TUPLE_ELEM(2, 0, param)& rlv) const \ { \ BOOST_PP_TUPLE_ELEM(2, 0, param) rv; \ return rv; \ } \ #define GEN_ALGEBRAIC_OPS(type, size, operators)\ BOOST_PP_REPEAT_FROM_TO( \ 0, \ BOOST_PP_ARRAY_SIZE(operators), \ GEN_ALGEBRAIC_OPS_REP_MACRO, \ (type, operators) \ ) \
avec ALGEBRAIC_OPS défini comme
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 GEN_ALGEBRAIC_OPS(vec2, 2, ALGEBRAIC_OPS)
cela me donne
Code : Sélectionner tout - Visualiser dans une fenêtre à part #define ALGEBRAIC_OPS (4, (Add, Sub, Mul, Div))
comme attendu, mais avec ALGEBRAIC_OPS définis comme cela
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 vec2 operatorAdd (const vec2& rlv) const { vec2 rv; return rv; } vec2 operatorSub (const vec2& rlv) const { vec2 rv; return rv; } vec2 operatorMul (const vec2& rlv) const { vec2 rv; return rv; } vec2 operatorDiv (const vec2& rlv) const { vec2 rv; return rv; }
j'obtiens l'erreur suivante:
Code : Sélectionner tout - Visualiser dans une fenêtre à part #define ALGEBRAIC_OPS (4, (+, -, *, /))
des idées, voire des solutions?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 error: pasting "operator" and "+" does not give a valid preprocessor token error: pasting "operator" and "-" does not give a valid preprocessor token error: pasting "operator" and "*" does not give a valid preprocessor token error: pasting "operator" and "/" does not give a valid preprocessor token
Partager