C++ BOOST_PP_SEQ_尺寸是如何工作的?
根据: BOOST_PP_SEQ_SIZE宏扩展为SEQ的大小 示例代码C++ BOOST_PP_SEQ_尺寸是如何工作的?,c++,boost,C++,Boost,根据: BOOST_PP_SEQ_SIZE宏扩展为SEQ的大小 示例代码 #包括 #定义如下(a)(b)(c) BOOST_PP_SEQ_SIZE(SEQ)//扩展到3 这很神奇。它是如何工作的?您可以在这里阅读源代码: 不同的编译器有不同的版本,但差别不大。此宏的定义如下所示: #定义BOOST_PP_SEQ_SIZE(SEQ)BOOST_PP_CAT(BOOST_PP_SEQ_SIZE,BOOST_PP_SEQ_SIZE_0 SEQ) #定义BOOST_PP_SEQ_SIZE_0(u)BO
#包括
#定义如下(a)(b)(c)
BOOST_PP_SEQ_SIZE(SEQ)//扩展到3
这很神奇。它是如何工作的?您可以在这里阅读源代码: 不同的编译器有不同的版本,但差别不大。此宏的定义如下所示:
#定义BOOST_PP_SEQ_SIZE(SEQ)BOOST_PP_CAT(BOOST_PP_SEQ_SIZE,BOOST_PP_SEQ_SIZE_0 SEQ)
#定义BOOST_PP_SEQ_SIZE_0(u)BOOST_PP_SEQ_SIZE_1
#定义BOOST_PP_SEQ_SIZE_1(u)BOOST_PP_SEQ_SIZE_2
#定义BOOST_PP_SEQ_SIZE_2(u)BOOST_PP_SEQ_SIZE_3
#定义BOOST_PP_SEQ_SIZE_3(u)BOOST_PP_SEQ_SIZE_4
#定义BOOST_PP_SEQ_SIZE_4(u)BOOST_PP_SEQ_SIZE_5
... ...
#定义BOOST_PP_SEQ_SIZE_256(u)BOOST_PP_SEQ_SIZE_257
#定义提升大小提升大小0
#定义提升大小提升大小1
#定义提升大小提升大小2
... ...
#定义提升大小提升大小提升大小257
这段代码:
定义顺序(a)(b)(c)
增压器大小(顺序)
将扩展为:
BOOST_PP_CAT(BOOST_PP_SEQ_SIZE_,BOOST_PP_SEQ_SIZE_0(a)(b)(c))
->BOOST_PP_CAT(BOOST_PP_SEQ_SIZE_,BOOST_PP_SEQ_SIZE_1(b)(c))
->BOOST_PP_CAT(BOOST_PP_SEQ_SIZE_,BOOST_PP_SEQ_SIZE_2(c))
->BOOST_PP_CAT(BOOST_PP_SEQ_SIZE_,BOOST_PP_SEQ_SIZE_3)
->增压器大小增压器大小增压器大小3
-> 3
这就是它的工作原理
需要注意的一点是,当序列比预期的长(例如257)时,没有准备好友好的错误消息,但是,它存在于boost/预处理器
的for
部分