Как я мог написать макрос, который похож на 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
Было предложено решение этой проблемы Вот, названный добавить #define BOOST_PP_SEQ_ENUM_0
, Он был отклонен с комментарием «нет такой вещи, как пустая последовательность», но, похоже, это решает мою проблему.
Вам просто нужно определить SEQ
как пустая последовательность:
#define SEQ ()
и вы можете использовать BOOST_PP_SEQ_ENUM
непосредственно.
Работает здесь с Boost 1.47 с использованием G ++ 4.7.1 и VC 2010.
Вы можете использовать это:
#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)