Ben*_*son 5 c++ macros c-preprocessor variadic-macros c++11
我尝试获取发送到可变参数宏的第一个实际参数.这是我试过的,哪些在VS2010中不起作用:
#define FIRST_ARG(N, ...) N
#define MY_MACRO(...) decltype(FIRST_ARG(__VA_ARGS__))
Run Code Online (Sandbox Code Playgroud)
当我查看预处理器输出时,我看到FIRST_ARG返回发送给MY_MACRO... 的整个参数列表
另一方面,当我尝试:
FIRST_ARG(1,2,3)
Run Code Online (Sandbox Code Playgroud)
它按预期扩展到1.
这似乎是臭名昭着的两级concat宏解决问题的逆转.我知道"宏参数在插入宏体之前已完全展开"但这似乎对我没有帮助,因为我不明白这意味着什么......和__VA_ARGS__
显然是__VA_ARGS__绑定,N只是稍后评估.我尝试了几种额外的宏观方法,但没有用.
Jam*_*lis 10
这是Visual C++预处理器中的一个错误.列出的解决方法有效.这个:
#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)
Run Code Online (Sandbox Code Playgroud)
扩展为:
decltype(x)
Run Code Online (Sandbox Code Playgroud)