我尝试获取发送到可变参数宏的第一个实际参数。这是我尝试过的,在 VS2010 中不起作用:
#define FIRST_ARG(N, ...) N
#define MY_MACRO(...) decltype(FIRST_ARG(__VA_ARGS__))
当我查看预处理器输出时,我看到FIRST_ARG
返回发送到的整个参数列表MY_MACRO
...
另一方面,当我尝试:
FIRST_ARG(1,2,3)
它按预期扩展为 1。
这似乎与臭名昭著的两级连接宏所解决的问题相反。我知道“宏参数在插入宏体之前已完全展开”,但这似乎对我没有帮助,因为我不明白这在...和的上下文中意味着什么__VA_ARGS__
明显地__VA_ARGS__
绑定到N
并且仅在稍后进行评估。我尝试了几种具有额外宏观级别的方法,但没有帮助。
This is Visual C++ 预处理器中的错误 http://connect.microsoft.com/VisualStudio/feedback/details/380090/variadic-macro-replacement。那里列出的解决方法有效。这:
#define FIRST_ARG_(N, ...) N
#define FIRST_ARG(args) FIRST_ARG_ args
#define MY_MACRO(...) decltype(FIRST_ARG((__VA_ARGS__)))
MY_MACRO(x, y, z)
扩展到:
decltype(x)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)