#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 失敗 !!!
留言列表