Несколько аргументов для данных в BOOST_PP_REPEAT

0

Я хочу использовать BOOST_PP_REPEAT (счетчик, макрос, данные), и мой макрос выглядит

'TEMPLATE (z, n, x, y)

BOOST_PP_REPEAT (5, ШАБЛОН, 4, 5) '

Он жалуется, что BOOST_PP_REPEAT передается 4 аргументам, пока он только ожидает 3. Есть ли способ упаковать два аргумента в параметр "data" BOOST_PP_REPEAT.

Благодарю!

  • 0
    Решение состоит в том, чтобы заключить (4,5) во вложенные скобки, но я не могу получить макрос Boost для удаления этих скобок, потому что запись DNS boost.org мне не распространяется :(
Теги:
boost
boost-preprocessor

2 ответа

1

Используйте BOOST_PP_TUPLE_ELEM:

#define TEMPLATE (z, n, data) use_first(BOOST_PP_TUPLE_ELEM(2, 0, data)); use_second(BOOST_PP_TUPLE_ELEM(2, 1, data));
#define YOUR_MACRO(n, arg1, arg2) BOOST_PP_REPEAT(5, TEMPLATE, (arg1, arg2))
0

Сделайте список аргументов отличным аргументом с вложенными круглыми скобками:

BOOST_PP_REPEAT (5, TEMPLATE_2ARG, (4, 5))

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

#define STRIP_PARENS( ... ) __VA_ARGS__

#define TEMPLATE_2ARG( I, ARGS ) TEMPLATE( I, STRIP_PARENS ARGS )
#define TEMPLATE( I, X, Y ) whatever

Ещё вопросы

Сообщество Overcoder
Наверх
Меню