【问题标题】:Number of arguments in macro definition宏定义中的参数数量
【发布时间】:2010-06-20 21:38:35
【问题描述】:

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

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

当我只使用一个参数进行函数调用时,一切都很好,但我需要更多。我通过定义不同的宏来查看 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);

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

【问题讨论】:

  • 你为什么需要这个?为什么不直接使用模板化函数,不使用宏?
  • @doublep 因为调用要大得多,占用的地方也多。我在这里简化了。

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


【解决方案1】:

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

【讨论】:

  • 我不会担心 VC6:它不支持 C++。
  • 它支持 C++ 好吧(我将它用于遗留开发),你不能对模板和宏太着迷,而且你需要使用更好的 STL,VC6 的(作为朋友描述它)是艾滋病
猜你喜欢
  • 1970-01-01
  • 2015-08-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-12-28
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多