BOOST_PP_SEQ_ENUM на пустой последовательности

Как я мог написать макрос, который похож на 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

1

Решение

Было предложено решение этой проблемы Вот, названный добавить #define BOOST_PP_SEQ_ENUM_0, Он был отклонен с комментарием «нет такой вещи, как пустая последовательность», но, похоже, это решает мою проблему.

1

Другие решения

Вам просто нужно определить SEQ как пустая последовательность:

#define SEQ ()

и вы можете использовать BOOST_PP_SEQ_ENUM непосредственно.

Работает здесь с Boost 1.47 с использованием G ++ 4.7.1 и VC 2010.

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)

0
По вопросам рекламы ammmcru@yandex.ru
Adblock
detector