宏定义中的参数数量

时间:2010-06-20 21:38:35

标签: c++ macros arguments c-preprocessor variadic-macros

我有一些模板化函数,由于模板类型,它具有不同数量的参数。此函数包含宏定义。

#define SomeTemplate(TemplateType, Arguments) someFunc<TemplateType>(Arguments);

当我只使用一个参数进行函数调用时,一切都还可以,但我还需要更多。我看了看它通过定义不同的宏来做这些事情,比如:

#define TEMP_1(Arg1) someFunc<Template>(Arg1);
#define TEMP_2(Arg1, Arg2) someFunc<Template>(Arg1, Arg2);
#define TEMP_3(Arg1, Arg2, Arg3) someFunc<Template>(Arg1, Arg2, Arg3);

但是这段代码标记为编译器可移植。有一些方法可以使用一些带有任意数量参数的定义。我怎么能这样做?

1 个答案:

答案 0 :(得分:2)

我们在宏定义中使用__VA__ARGS__的唯一方法,然而,它不是可移植的,因为像VC6这样的旧编译器不支持var arg'ed宏,请参阅: MSVC GCC