考虑这个宏:可变参数的宏零个参数,和逗号
#define MAKE_TEMPLATE(...) template <typename T, __VA_ARGS__ >
当与零个参数使用它产生坏的代码,因为编译器期望逗号之后的标识符。事实上,VC的预处理器足够聪明,可以删除逗号,但GCC不是。 由于宏不能超载,好像它需要一个单独的宏这种特殊情况下得到它的权利,如:
#define MAKE_TEMPLATE_Z() template <typename T>
有没有什么办法让它不引入第二个宏工作?
谢谢。顺便说一句,这是标准的行为,还是一个GCC的东西? – uj2 2010-08-25 06:14:54
@ uj2:这是GCC;标准只禁止空的可变参数列表。顺便说一句,这是混合C99与C++,所以这段代码是严格的非标准的,除非你在C++ 0x ...在这种情况下,你应该... – Potatoswatter 2010-08-25 06:16:48
不介意模板,它只是一个玩具的例子。这怎么会是0x,C++ 98/03没有定义可变宏? – uj2 2010-08-25 06:22:13