C++ BOOST_PP_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

根据:

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)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
部分