我怎么能写一个类似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
答案 0 :(得分:1)
提出了here提出的问题的解决方案,名为add #define BOOST_PP_SEQ_ENUM_0
。它被评论“没有这样的空序列”拒绝了,但这似乎解决了我的问题。
答案 1 :(得分:0)
您只需要将SEQ
定义为空序列:
#define SEQ ()
您可以直接使用BOOST_PP_SEQ_ENUM
。
使用G ++ 4.7.1和VC 2010与Boost 1.47一起使用。
答案 2 :(得分:0)
您可以使用:
#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的序列)