相关疑难解决方法(0)

MSVC不会正确扩展__VA_ARGS__

考虑以下代码:

#define F(x, ...) X = x and VA_ARGS = __VA_ARGS__
#define G(...) F(__VA_ARGS__)
F(1, 2, 3)
G(1, 2, 3)
Run Code Online (Sandbox Code Playgroud)

X = 1 and VA_ARGS = 2, 3两个宏的预期输出,这就是我用GCC得到的,但是,MSVC将其扩展为:

X = 1 and VA_ARGS = 2, 3
X = 1, 2, 3 and VA_ARGS =
Run Code Online (Sandbox Code Playgroud)

也就是说,__VA_ARGS__将其扩展为单个参数,而不是分解为多个参数.

有什么方法吗?

visual-c++ c-preprocessor variadic-macros

48
推荐指数
2
解决办法
1万
查看次数

变体宏

有没有办法写这样的宏:

#define G(x1, x2, ... , xn) f(x1), f(x2), ... , f(xn)
Run Code Online (Sandbox Code Playgroud)

或者我需要为每个人定义这个n吗?

C++ 0x答案还可以.

编辑:我问的是如何创建这个表单的宏,而不是一般采用可变数量的参数的宏.

目标:所以我可以做以下事情:

#define MAKE_TUPLE(x1, x2, ... , xn) mytuple<decltype((x1)), decltype((x2)), ... , decltype((xn))>{x1, x2, ... , xn}
Run Code Online (Sandbox Code Playgroud)

因此,这mytuple可以在没有移动和复制的情况下创建,也可以使用聚合构造在临时创建的临时工具中进行不必要的引用.

c++ macros c-preprocessor variadic-macros c++11

3
推荐指数
2
解决办法
1794
查看次数