BOOST_PP_SEQ_ENUM在空序列上

BOOST_PP_SEQ_ENUM on an empty sequence

本文关键字:ENUM PP SEQ BOOST      更新时间:2023-10-16

我怎么能写一个宏像BOOST_PP_SEQ_ENUM,但处理空序列,即

#define SEQ (a)(b)
MY_BOOST_PP_SEQ_ENUM(SEQ) // expands to a,b
#define SEQ
MY_BOOST_PP_SEQ_ENUM(SEQ) // expands to nothing

这里提出了一个解决方案,名为add #define BOOST_PP_SEQ_ENUM_0。它被拒绝了评论"没有这样的事情作为一个空序列",但这似乎解决了我的问题。

您只需要将SEQ定义为空序列:

#define SEQ ()

,可以直接使用BOOST_PP_SEQ_ENUM

你可以这样做:

#define PP_SEQ_ENUM(x) BOOST_PP_CAT(PP_SEQ_ENUM_0 x, _END)
#define PP_SEQ_ENUM_0(x) x PP_SEQ_ENUM_1
#define PP_SEQ_ENUM_1(x) , x PP_SEQ_ENUM_2
#define PP_SEQ_ENUM_2(x) , x PP_SEQ_ENUM_1
#define PP_SEQ_ENUM_0_END
#define PP_SEQ_ENUM_1_END
#define PP_SEQ_ENUM_2_END 

这应该适用于任何大小的序列(甚至大于256)