考虑这个宏:
#define MAKE_TEMPLATE(...) template <typename T, __VA_ARGS__ >
当与零参数一起使用时,它会产生错误的代码,因为编译器需要逗号后的标识符。实际上,VC 的预处理器足够聪明,可以删除逗号,但 GCC 的则不然。由于不能重载宏,因此似乎需要一个单独的宏才能使这种特殊情况正确,如下所示:
#define MAKE_TEMPLATE_Z() template <typename T>
有什么方法可以在不引入第二个宏的情况下使其工作?