【发布时间】:2011-09-11 08:51:21
【问题描述】:
有没有办法写这样的宏:
#define G(x1, x2, ... , xn) f(x1), f(x2), ... , f(xn)
或者我需要为每个n 定义这个吗?
C++0x 答案没问题。
编辑:我问的是如何创建这种形式的宏,而不是通常采用可变数量参数的宏。
目标::所以我可以执行以下操作:
#define MAKE_TUPLE(x1, x2, ... , xn) mytuple<decltype((x1)), decltype((x2)), ... , decltype((xn))>{x1, x2, ... , xn}
所以这个mytuple 可以在没有移动和复制的情况下创建,也不需要对可以使用聚合构造就地创建的临时对象的不必要引用。
【问题讨论】:
-
如果你使用了 C++0x 的任何特性,那么它就不是宏。
-
@Mehrdad:C++0x 中的宏没有变化吗?如果是这样,我会删除标签。
-
@Clinton: What for? 询问目标,而不是步骤。 (它真的需要是一个宏吗?C 或 C++,而不是两者。)
-
@Clinton:我打算做一个通用的命名参数库——如果你开始引入这样的宏,没有人会使用那个库。
标签: c++ c++11 macros c-preprocessor variadic-macros