
Date: Sun, 20 Jun 2010 18:02:16 -0700 From: watanabesj@gmail.com To: boost-users@lists.boost.org Subject: Re: [Boost-users] preprocessor metaprogramming question
AMDG
Nathan Ridge wrote:
Nathan Ridge wrote:
MEMBERS((a)(b)(c))
I don't suppose there's any way to have the syntax be MEMBERS(a, b, c)?
Not without variadic macros.
How would one do it using variadic macros?
I don't know, as I've never tried to use variadic macros. There ought to be some way to figure out how many argument you have. Once you have that, you can use Boost.PP tuples or arrays.
There appears to be no builtin way, but it turns out (http://groups.google.com/group/comp.std.c/browse_thread/thread/77ee8c8f92e4a...) you can write a macro that counts the number of arguments: #define PP_NARG(...) \ PP_NARG_(__VA_ARGS__,PP_RSEQ_N()) #define PP_NARG_(...) \ PP_ARG_N(__VA_ARGS__) #define PP_ARG_N( \ _1, _2, _3, _4, _5, _6, _7, _8, _9,_10, \ _11,_12,_13,_14,_15,_16,_17,_18,_19,_20, \ _21,_22,_23,_24,_25,_26,_27,_28,_29,_30, \ _31,_32,_33,_34,_35,_36,_37,_38,_39,_40, \ _41,_42,_43,_44,_45,_46,_47,_48,_49,_50, \ _51,_52,_53,_54,_55,_56,_57,_58,_59,_60, \ _61,_62,_63,N,...) N #define PP_RSEQ_N() \ 63,62,61,60, \ 59,58,57,56,55,54,53,52,51,50, \ 49,48,47,46,45,44,43,42,41,40, \ 39,38,37,36,35,34,33,32,31,30, \ 29,28,27,26,25,24,23,22,21,20, \ 19,18,17,16,15,14,13,12,11,10, \ 9,8,7,6,5,4,3,2,1,0 Is it possible to improve on this macro and write it in constant space with Boost.PP? Thanks, Nate. _________________________________________________________________ Turn down-time into play-time with Messenger games http://go.microsoft.com/?linkid=9734385