boost::preprocess的神秘魔法的实现细节:BOOST_PP_SEQ_SIZE(SEQ)

BOOST_PP_SEQ_SIZE还可以展示一下,BEGIN BOOST_PP_SEQ_FOLD_LEFT(SUB_S, 22, SEQ) == 10 END直接生产了2.6M的log过程惊恐

# define SEQ (4)(1)(5)(2)

 

开始处理代码:
BOOST_PP_SEQ_SIZE(SEQ)

//----------------------------------------

开始展开函数宏:
  @@@@ BOOST_PP_SEQ_SIZE(SEQ) @@ 

//----------------------------------------

对实参
SEQ
进行展开

//----------------------------------------

开始处理代码:
SEQ

//----------------------------------------

开始展开对象宏:
  @@@@ SEQ @@ 

//----------------------------------------

对象宏
SEQ
进行直接替换,结果为:
 (4)(1)(5)(2)

//----------------------------------------

开始处理代码:
 (4)(1)(5)(2)

//----------------------------------------

对代码
 (4)(1)(5)(2)

宏替换的最终结果为:
 (4)(1)(5)(2)

//----------------------------------------

对象宏
SEQ
展开的最终结果为:
 (4)(1)(5)(2)

//----------------------------------------

对代码
SEQ
宏替换的最终结果为:
 (4)(1)(5)(2)

//----------------------------------------

实参
SEQ
展开的最终结果:
(4)(1)(5)(2)

//----------------------------------------

函数宏的调用
BOOST_PP_SEQ_SIZE(SEQ)
对宏体
 BOOST_PP_CAT(BOOST_PP_SEQ_SIZE_, BOOST_PP_SEQ_SIZE_0 seq)

进行实参替换的结果为:
 BOOST_PP_CAT(BOOST_PP_SEQ_SIZE_, BOOST_PP_SEQ_SIZE_0 (4)(1)(5)(2))

//----------------------------------------

开始处理代码:
 BOOST_PP_CAT(BOOST_PP_SEQ_SIZE_, BOOST_PP_SEQ_SIZE_0 (4)(1)(5)(2))

//----------------------------------------

开始展开函数宏:
   @@@@ BOOST_PP_CAT(BOOST_PP_SEQ_SIZE_, BOOST_PP_SEQ_SIZE_0 (4)(1)(5)(2)) @@ 

//----------------------------------------

对实参
BOOST_PP_SEQ_SIZE_
进行展开

//----------------------------------------

开始处理代码:
BOOST_PP_SEQ_SIZE_

//----------------------------------------

对代码
BOOST_PP_SEQ_SIZE_
宏替换的最终结果为:
BOOST_PP_SEQ_SIZE_

//----------------------------------------

实参
BOOST_PP_SEQ_SIZE_
展开的最终结果:
BOOST_PP_SEQ_SIZE_

//----------------------------------------

对实参
BOOST_PP_SEQ_SIZE_0 (4)(1)(5)(2)
进行展开

//----------------------------------------

开始处理代码:
BOOST_PP_SEQ_SIZE_0 (4)(1)(5)(2)

//----------------------------------------

开始展开函数宏:
  @@@@ BOOST_PP_SEQ_SIZE_0 (4) @@  (1)(5)(2)

//----------------------------------------

函数宏的调用
BOOST_PP_SEQ_SIZE_0(4)
对宏体
 BOOST_PP_SEQ_SIZE_1

进行实参替换的结果为:
 BOOST_PP_SEQ_SIZE_1

//----------------------------------------

开始处理代码:
 BOOST_PP_SEQ_SIZE_1

//----------------------------------------

对代码
 BOOST_PP_SEQ_SIZE_1

宏替换的最终结果为:
 BOOST_PP_SEQ_SIZE_1

//----------------------------------------

开始展开函数宏:
   @@@@ BOOST_PP_SEQ_SIZE_1
(1) @@  (5)(2)

//----------------------------------------

函数宏的调用
BOOST_PP_SEQ_SIZE_1(1)
对宏体
 BOOST_PP_SEQ_SIZE_2

进行实参替换的结果为:
 BOOST_PP_SEQ_SIZE_2

//----------------------------------------

开始处理代码:
 BOOST_PP_SEQ_SIZE_2

//----------------------------------------

对代码
 BOOST_PP_SEQ_SIZE_2

宏替换的最终结果为:
 BOOST_PP_SEQ_SIZE_2

//----------------------------------------

开始展开函数宏:
    @@@@ BOOST_PP_SEQ_SIZE_2
(5) @@  (2)

//----------------------------------------

函数宏的调用
BOOST_PP_SEQ_SIZE_2(5)
对宏体
 BOOST_PP_SEQ_SIZE_3

进行实参替换的结果为:
 BOOST_PP_SEQ_SIZE_3

//----------------------------------------

开始处理代码:
 BOOST_PP_SEQ_SIZE_3

//----------------------------------------

对代码
 BOOST_PP_SEQ_SIZE_3

宏替换的最终结果为:
 BOOST_PP_SEQ_SIZE_3

//----------------------------------------

开始展开函数宏:
     @@@@ BOOST_PP_SEQ_SIZE_3
(2) @@ 

//----------------------------------------

函数宏的调用
BOOST_PP_SEQ_SIZE_3(2)
对宏体
 BOOST_PP_SEQ_SIZE_4

进行实参替换的结果为:
 BOOST_PP_SEQ_SIZE_4

//----------------------------------------

开始处理代码:
 BOOST_PP_SEQ_SIZE_4

//----------------------------------------

对代码
 BOOST_PP_SEQ_SIZE_4

宏替换的最终结果为:
 BOOST_PP_SEQ_SIZE_4

//----------------------------------------

对代码
BOOST_PP_SEQ_SIZE_0 (4)(1)(5)(2)
宏替换的最终结果为:
    BOOST_PP_SEQ_SIZE_4

//----------------------------------------

实参
BOOST_PP_SEQ_SIZE_0 (4)(1)(5)(2)
展开的最终结果:
BOOST_PP_SEQ_SIZE_4

//----------------------------------------

函数宏的调用
BOOST_PP_CAT(BOOST_PP_SEQ_SIZE_, BOOST_PP_SEQ_SIZE_0 (4)(1)(5)(2))
对宏体
 BOOST_PP_CAT_I(a, b)

进行实参替换的结果为:
 BOOST_PP_CAT_I(BOOST_PP_SEQ_SIZE_, BOOST_PP_SEQ_SIZE_4)

//----------------------------------------

开始处理代码:
 BOOST_PP_CAT_I(BOOST_PP_SEQ_SIZE_, BOOST_PP_SEQ_SIZE_4)

//----------------------------------------

开始展开函数宏:
   @@@@ BOOST_PP_CAT_I(BOOST_PP_SEQ_SIZE_, BOOST_PP_SEQ_SIZE_4) @@ 

//----------------------------------------

函数宏的调用
BOOST_PP_CAT_I(BOOST_PP_SEQ_SIZE_, BOOST_PP_SEQ_SIZE_4)
对宏体
 a ## b

进行实参替换的结果为:
 BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_4

//----------------------------------------

开始处理代码:
 BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_4

//----------------------------------------

开始展开对象宏:
   @@@@ BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_4 @@ 

//----------------------------------------

对象宏
BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_4
进行直接替换,结果为:
 4

//----------------------------------------

开始处理代码:
 4

//----------------------------------------

对代码
 4

宏替换的最终结果为:
 4

//----------------------------------------

对象宏
BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_4
展开的最终结果为:
 4

//----------------------------------------

对代码
 BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_4

宏替换的最终结果为:
  4

//----------------------------------------

函数宏的调用
BOOST_PP_CAT_I(BOOST_PP_SEQ_SIZE_, BOOST_PP_SEQ_SIZE_4)
展开的最终结果为:
 BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_4

//----------------------------------------

对代码
 BOOST_PP_CAT_I(BOOST_PP_SEQ_SIZE_, BOOST_PP_SEQ_SIZE_4)

宏替换的最终结果为:
   4

//----------------------------------------

函数宏的调用
BOOST_PP_CAT(BOOST_PP_SEQ_SIZE_, BOOST_PP_SEQ_SIZE_0 (4)(1)(5)(2))
展开的最终结果为:
 BOOST_PP_CAT_I(BOOST_PP_SEQ_SIZE_, BOOST_PP_SEQ_SIZE_4)

//----------------------------------------

对代码
 BOOST_PP_CAT(BOOST_PP_SEQ_SIZE_, BOOST_PP_SEQ_SIZE_0 (4)(1)(5)(2))

宏替换的最终结果为:
    4

//----------------------------------------

函数宏的调用
BOOST_PP_SEQ_SIZE(SEQ)
展开的最终结果为:
 BOOST_PP_CAT(BOOST_PP_SEQ_SIZE_, BOOST_PP_SEQ_SIZE_0 (4)(1)(5)(2))

//----------------------------------------

对代码
BOOST_PP_SEQ_SIZE(SEQ)

宏替换的最终结果为:
    4

你可能感兴趣的:(C++,C++)