----- Original Message ----- From: "Aleksey Gurtovoy" <[EMAIL PROTECTED]>
Hi Aleksey, > I am going to use our wonderful Preprocessor library to generate a > metafunction that basically looks like this: [...] > I love everything about it except for the "(0, (1, (2, (3, (4, > BOOST_PP_NIL)))))" part. I would like the above to become something along > these lines: > > value = BOOST_PP_RANGE_FOLD_LEFT( > AUX_MAX_ARITY_OP > , -1 > , BOOST_PP_RANGE(0, 4) > ) This one is certainly possible. However, "BOOST_PP_RANGE_FOLD_LEFT" would just be a synonym for whatever folding macro operates on the type generated by "BOOST_PP_RANGE." It would be to difficult to make a parametizable macro that yields a sequence of numbers: BOOST_PP_SEQ_FOLD_LEFT( AUX_MAX_ARITY_OP , -1 , BOOST_PP_SEQ_RANGE(0, 4) ) Which is close to what you want. In fact, it is almost already there: #include <boost/preprocessor/seq/fold_left.hpp> #include <boost/preprocessor/seq/subseq.hpp> #define NUMBERS \ (0)(1)(2)(3)(4)(5)(6)(7)(8)(9) \ (10)(11)(12)(13)(14)(15)(16)(17)(18)(19) \ /* ... */ #define RANGE(first, length) \ BOOST_PP_SEQ_SUBSEQ( NUMBERS, first, length ) \ /**/ BOOST_PP_SEQ_FOLD_LEFT(AUX_MAX_ARITY_OP, -1, RANGE(0, 5)) The only major difference is that BOOST_PP_SEQ_SUBSEQ takes first and length operands, rather than first and last. Which, for the zero-case is almost the same: first -> BOOST_PP_INC(last). It wouldn't be too difficult to bang out a variant that goes from first -> last though. > or, better yet, > > value = BOOST_PP_FOLD_LEFT( > AUX_MAX_ARITY_OP > , -1 > , BOOST_PP_RANGE(0, 4) > ) > > where 'BOOST_PP_FOLD_LEFT' is a generic algorithm that can be used on all PP > sequences. > > How hard would it be to have something like this? With C99's variadic macros, fairly easy with lists vs. sequences. Without them, impossible. The reason is simple, without variadics I have no way of telling the difference between (a) and (a, b), etc.... With variadics I can count the arguments. > I suppose it's possible to generate the code I need using BOOST_PP_WHILE, > but IMO that solution wouldn't be as conceptually nice and intuitive as the > above. Paul Mensonides _______________________________________________ Unsubscribe & other changes: http://lists.boost.org/mailman/listinfo.cgi/boost