我怎么能写一个类似的宏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
我怎么能写一个类似的宏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
直接使用。
使用 G++ 4.7.1 和 VC 2010 与 Boost 1.47 一起工作。
你可以使用这个:
#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 的序列)