c++ - 可以扩展宏可变参数吗?
问题描述
我有很多自定义属性(如果你问的话,通过使用 clang 注释),写起来很烦人
__attribute(a)__ __attribute(b)__ __attribute(c)__ int i;
我可以设计一个宏,例如MyAttr(...)
,如果我使用MyAttr(a,b,c)
,它会扩展为__attribute(a)__ __attribute(b)__ __attribute(c)__
?
解决方案
可以使用 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))
推荐阅读
- angular - 更新源 Observable 时未调用 Observable 管道
- android - 如何在flutter_inappwebview中选择客户端证书?
- java - 将数组分成两半是否会提高性能或处理时间?
- python - 我需要使用 discord.py rewrite 更改 python discord bot 的头像(个人资料图片)
- fullcalendar - 获取视图信息 Fullcalendar V5
- python - 尝试在 jupyter notebook 中拆分数据时出错
- kubernetes - 使用 K8s Init Container 复制现有文件
- shell - 为什么 find 在传递当前目录与路径时返回不同的排序结果?
- apache-nifi - NiFi - 无法转换 CHOICE,类型必须明确
- azure-devops - 从公司 AD 中删除时删除 Azure DevOps 帐户