我尝试获取发送到可变参数宏的第一个实际参数。这是我尝试过的,在 VS2010 中不起作用:
#define FIRST_ARG(N, ...) N
#define MY_MACRO(...) decltype(FIRST_ARG(__VA_ARGS__))
当我查看预处理器输出时,我看到它FIRST_ARG
返回发送到的整个参数列表MY_MACRO
......
另一方面,当我尝试:
FIRST_ARG(1,2,3)
它按预期扩展为 1。
这似乎与臭名昭著的两级 concat 宏解决的问题相反。我知道“宏参数在插入宏体之前已完全展开”但这似乎对我没有帮助,因为我不明白这在...的上下文中意味着什么__VA_ARGS__
显然__VA_ARGS__
绑定到N
并且仅在以后评估。我尝试了几种使用额外宏观级别的方法,但没有帮助。