Générer des operateurs avec Boost.Preprocessor (ou Boost.operators)
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:
Code:
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) \
) \ |
En générant mes operateurs pour un vec2 (par exemple) de la facon suivante
Code:
1 2
|
GEN_ALGEBRAIC_OPS(vec2, 2, ALGEBRAIC_OPS) |
avec ALGEBRAIC_OPS défini comme
Code:
#define ALGEBRAIC_OPS (4, (Add, Sub, Mul, Div))
cela me donne
Code:
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; } |
comme attendu, mais avec ALGEBRAIC_OPS définis comme cela
Code:
#define ALGEBRAIC_OPS (4, (+, -, *, /))
j'obtiens l'erreur suivante:
Code:
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 |
des idées, voire des solutions?