空序列上的BOOST_PP_SEQ_ENUM

时间:2013-01-03 00:27:06

标签: c++ boost boost-preprocessor

我怎么能写一个类似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

3 个答案:

答案 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的序列)