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

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值