#define COUNT_ARGS(...)     PP_NARG_IMPL(__VA_ARGS__,PP_RSEQ_N( ) )
#define PP_NARG_IMPL(...)   PP_ARG_N(__VA_ARGS__)
#define PP_ARG_N( _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, N, ...) N
#define PP_RSEQ_N() 10,9,8,7,6,5,4,3,2,1,0

int main()
{
    std::cout << COUNT_ARGS(a,b,c,d,e) << std::endl ;
}

 

出自 : http://cpptruths.blogspot.tw/

 

COUNT_ARGS(a,b,c,d,e)  =  PP_NARG_IMPL( a ,  b,  c,  d,  e, 10,  9,  8,  7,  6,  5,4,3,2,1,0)

=  PP_ARG_N    ( _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, N,...)   N

 

So :

 

PP_NARG_IMPL(  a ,   b,   c,   d,   e,  10,   9,   8,  7,    6,   5,4,3,2,1,0)

PP_ARG_N        ( _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, N,...)   N

 

5 剛好就是 N 那個欄位 ,  所以 ,  print 出來的值就會是 5   !!!

 

如果是 std::cout << COUNT_ARGS(a,b,c,d,e,f,g,h,i,j,k) << std::endl ;  呢 ??  compile error :

 error:  k was not declared in this scope , 因為 :

 

COUNT_ARGS(a,b,c,d,e,f,g,h,i,j,k) = PP_NARG_IMPL(a,b,c,d,e,f,g,h,i,j,k,10,  9,  8,  7,  6,  5,4,3,2,1,0)

=  PP_ARG_N( _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, N, ...) N

 

所以  :

 

PP_NARG_IMPL(  a,    b,    c,    d,  e,   f,    g,   h,   i,      j,   k,  10,  9,  8,  7,  6,  5,4,3,2,1,0)

PP_ARG_N        ( _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, N,...)   N

 

N 那欄位剛好是 k 這個值 , 但是 程式沒有定義 k 這個變數 ,  所以 compile 失敗 !!!

 

arrow
arrow
    全站熱搜

    hedgezzz 發表在 痞客邦 留言(0) 人氣()