C ++ Обработка каждого аргумента варидового макроса индивидуально [дублировать]C++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 C ++ Обработка каждого аргумента варидового макроса индивидуально [дублировать]

Сообщение Anonymous »

У меня есть два макроса - Macro1 (x, y) и macro2 (x, ...)
Я хочу для макро2 (x, a, b, c, c ...) , чтобы расширить в Macro1 (x, a), Macro1 (x, b), Macro1 (x, c),
Изменить:
in macro1 < /code> x - это класс, а Y - один из его участников, фактический макрос - это смещение (x, y), sizeof (x :: y) < /code> < /p>
edit2:

edit2:

//to expand other parts of expression before concatenation
#define JOIN(x, y) JOIN_(x, y)
#define JOIN_(x, y) x ## y

//counts amount of variadic arguments (max 10 args)
#define NARGS_(_0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, N, ...) N
#define NARGS(...) NARGS_(_, ## __VA_ARGS__, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0)

//max 5 args
#define MAP_1(f, x, a) f(x, a)
#define MAP_2(f, x, a, b) f(x, a), f(x, b)
#define MAP_3(f, x, a, b, c) f(x, a), f(x, b), f(x, c)
#define MAP_4(f, x, a, b, c, d) f(x, a), f(x, b), f(x, c), f(x, d)
#define MAP_5(f, x, a, b, c, d, e) f(x, a), f(x, b), f(x, c), f(x, d), f(x, e)
#define MAP(f, x, ...) JOIN(MAP_, NARGS(__VA_ARGS__)) (f, x, __VA_ARGS__)


Подробнее здесь: https://stackoverflow.com/questions/795 ... dividually
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»