объединить результат вложенного макроса

У меня есть следующий набор макросов:

macro_1(p1)
macro_2(p1, p2)
macro_3(p1, p2, p3)
etc.

Теперь я хочу сделать еще один универсальный макрос, который будет сравнивать с предыдущими, и я пытаюсь сделать это так:

#define macro_x(...) macro_ ## BOOST_PP_VARIADIC_SIZE(__VA_ARGS__) (__VA_ARGS__)

Идея заключается в том, что BOOST_PP_VARIADIC_SIZE(__VA_ARGS__) оценивает правильное количество параметров, которые затем превращаются в правильный макрос.

Но, к сожалению, я только что узнал, что BOOST_PP_VARIADIC_SIZE() будет оцениваться после того, как будет соединен с macro_, что приводит к нежелательному коду macro_BOOST_PP_VARIADIC_SIZE,

Есть ли способ, которым я могу сначала оценить BOOST_PP_VARIADIC_SIZE а затем объединить с macro_?

0

Решение

Это уже сделано для вас BOOST_PP_OVERLOAD:

#define macro_x(...) BOOST_PP_OVERLOAD(macro_, __VA_ARGS__)(__VA_ARGS__)

Ваша причина не работает в том, что для расширения макроса необходима задержка. Хотя легко определить свой собственный, BOOST_PP_CAT уже существует:

#define CAT_(a, b) a##b
#define CAT(a, b) CAT_(a, b)
0

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

Других решений пока нет …

По вопросам рекламы [email protected]