C++ 宏定义中的参数数

C++ 宏定义中的参数数,c++,macros,arguments,c-preprocessor,variadic-macros,C++,Macros,Arguments,C Preprocessor,Variadic Macros,我有一些模板化函数,由于模板类型的不同,它有不同数量的参数。此函数使用宏定义包装 #define SomeTemplate(TemplateType, Arguments) someFunc<TemplateType>(Arguments); #定义SomeTemplate(模板类型、参数)someFunc(参数); 当我只使用一个参数进行函数调用时,一切都正常,但我需要更多的参数。我研究了boost,它通过定义不同的宏来实现这些功能,比如: #define TEMP_1(Arg

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

#define SomeTemplate(TemplateType, Arguments) someFunc<TemplateType>(Arguments);
#定义SomeTemplate(模板类型、参数)someFunc(参数);
当我只使用一个参数进行函数调用时,一切都正常,但我需要更多的参数。我研究了boost,它通过定义不同的宏来实现这些功能,比如:

#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);
#定义TEMP_1(Arg1)someFunc(Arg1);
#定义TEMP_2(Arg1,Arg2)someFunc(Arg1,Arg2);
#定义TEMP_3(Arg1,Arg2,Arg3)someFunc(Arg1,Arg2,Arg3);

但这段代码被标记为编译器的可移植代码。有一种方法可以将某些定义与任意数量的参数一起使用。如何做到这一点?

唯一的方法是在宏定义中使用
\uuuu VA\uu ARGS\uuuu
,但是,它不是可移植的,因为像VC6这样的旧编译器不支持var arg'ed宏,请参见:

你为什么需要这个?为什么不直接使用模板函数,而不使用宏?@doublep,因为调用要大得多,发生的次数也更多。我已经简化了它。我不担心VC6:它不支持C++。它支持C++(我用它来进行遗留开发),你不能太过使用模板和宏,而且你需要使用一个更好的STL,VC6的一个(如朋友所描述的)是艾滋病。