Можно ли расширять параметры макроса Variadi c? - PullRequest
0 голосов
/ 07 августа 2020

У меня много настраиваемых атрибутов (используя аннотацию clang, если вы спросите), и мне неприятно писать

__attribute(a)__ __attribute(b)__ __attribute(c)__ int i;

, могу ли я создать макрос, например MyAttr(...), если я используйте MyAttr(a,b,c), он расширится до __attribute(a)__ __attribute(b)__ __attribute(c)__?

1 Ответ

0 голосов
/ 07 августа 2020

Это можно сделать с помощью boost.preprocessor, примерно так:

#include <boost/preprocessor.hpp>

#define ATTRIBUTE(r, _, elem) __attribute__((elem))

#define ATTRIBUTES(seq) BOOST_PP_SEQ_FOR_EACH(ATTRIBUTE, _, seq)

ATTRIBUTES((a)(b)(c)(d)) // expands to __attribute__((a)) __attribute__((b)) __attribute__((c)) __attribute__((d))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...