1

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

3 回答 3

1

这里提出了一个解决这个问题的方法,名为 add #define BOOST_PP_SEQ_ENUM_0。它被“没有空序列之类的东西”评论拒绝,但这似乎解决了我的问题。

于 2013-01-03T15:52:17.493 回答
0

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

#define SEQ ()

你可以BOOST_PP_SEQ_ENUM直接使用。

使用 G++ 4.7.1 和 VC 2010 与 Boost 1.47 一起工作。

于 2013-01-03T05:08:11.020 回答
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 的序列)

于 2013-01-12T02:07:08.507 回答