Advertisement
Guest User

Macro to count number of arguments

a guest
Jun 19th, 2015
579
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. #define PP_ARG_N( \
  2.           _1,  _2,  _3,  _4,  _5,  _6,  _7,  _8,  _9, _10, \
  3.          _11, _12, _13, _14, _15, _16, _17, _18, _19, _20, \
  4.          _21, _22, _23, _24, _25, _26, _27, _28, _29, _30, \
  5.          _31, _32, _33, _34, _35, _36, _37, _38, _39, _40, \
  6.          _41, _42, _43, _44, _45, _46, _47, _48, _49, _50, \
  7.          _51, _52, _53, _54, _55, _56, _57, _58, _59, _60, \
  8.          _61, _62, _63, N, ...) N
  9.  
  10. #define PP_RSEQ_N()                                        \
  11.          63, 62, 61, 60,                                   \
  12.          59, 58, 57, 56, 55, 54, 53, 52, 51, 50,           \
  13.          49, 48, 47, 46, 45, 44, 43, 42, 41, 40,           \
  14.          39, 38, 37, 36, 35, 34, 33, 32, 31, 30,           \
  15.          29, 28, 27, 26, 25, 24, 23, 22, 21, 20,           \
  16.          19, 18, 17, 16, 15, 14, 13, 12, 11, 10,           \
  17.           9,  8,  7,  6,  5,  4,  3,  2,  1,  0
  18.  
  19. #define PP_NARG_(...)    PP_ARG_N(__VA_ARGS__)    
  20.  
  21. #define PP_COMMASEQ_N()                                    \
  22.           1,  1,  1,  1,                                   \
  23.           1,  1,  1,  1,  1,  1,  1,  1,  1,  1,           \
  24.           1,  1,  1,  1,  1,  1,  1,  1,  1,  1,           \
  25.           1,  1,  1,  1,  1,  1,  1,  1,  1,  1,           \
  26.           1,  1,  1,  1,  1,  1,  1,  1,  1,  1,           \
  27.           1,  1,  1,  1,  1,  1,  1,  1,  1,  1,           \
  28.           1,  1,  1,  1,  1,  1,  1,  1,  0,  0
  29.  
  30. #define PP_COMMA()    ,
  31.  
  32. #define PP_HASCOMMA(...)                                   \
  33.           PP_NARG_(__VA_ARGS__, PP_COMMASEQ_N())
  34.  
  35. #define PP_NARG(...)                                       \
  36.           PP_NARG_HELPER1(                                 \
  37.               PP_HASCOMMA(__VA_ARGS__),                    \
  38.               PP_HASCOMMA(PP_COMMA __VA_ARGS__ ()),        \
  39.               PP_NARG_(__VA_ARGS__, PP_RSEQ_N()))
  40.  
  41. #define PP_NARG_HELPER1(a, b, N)    PP_NARG_HELPER2(a, b, N)
  42. #define PP_NARG_HELPER2(a, b, N)    PP_NARG_HELPER3_ ## a ## b(N)
  43. #define PP_NARG_HELPER3_01(N)    0
  44. #define PP_NARG_HELPER3_00(N)    1
  45. #define PP_NARG_HELPER3_11(N)    N
  46.  
  47.  
  48. // ----=====================================================================----
  49. //     Test
  50. // ----=====================================================================----
  51.  
  52.  #include <iostream>
  53.  using namespace std;
  54.  
  55. int main()
  56. {
  57.     cout << PP_NARG(1) << endl;
  58. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement