首页 > 解决方案 > 可以扩展宏可变参数吗?

问题描述

我有很多自定义属性(如果你问的话,通过使用 clang 注释),写起来很烦人

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

我可以设计一个宏,例如MyAttr(...),如果我使用MyAttr(a,b,c),它会扩展为__attribute(a)__ __attribute(b)__ __attribute(c)__

标签: c++macros

解决方案


可以使用 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))

推荐阅读