【发布时间】:2012-08-12 00:51:15
【问题描述】:
我正在尝试按参数数量重载宏。
当然,我实际上不能重载宏。
我尝试使用可变参数宏来选择正确的宏(使用这样一个事实,即如果 __VA_ARGS__ 不存在,它应该删除它之前的最后一个逗号 - GCC Reference):
#define TEST1() printf("TEST1");
#define TEST2() printf("TEST2");
#define CHOOSER(x, y,FUNC,...) FUNC()
#define MANIMACRO(...) CHOOSER(,__VA_ARGS__,TEST1,TEST2)
int main(void)
{
MANIMACRO(1);
MANIMACRO();
}
这个想法是,如果__VA_ARGS__ 存在,它应该将 4 个参数传递给 CHOOSER,其中第三个参数应该与未使用的参数一起“消失”。所以会选择 TEST1。
如果没有参数,__VA_ARGS__ 将为 null,并且应该已删除逗号,因此将选择并使用 TEST2。
所以,我想这不起作用,因为 __VA_ARGS__ 可能仅在预处理阶段结束时才被删除,在整个事情已经展开之后。
那么,我该怎么做呢? (在 vs2010 中)
【问题讨论】:
标签: c++ visual-studio-2010 macros c-preprocessor variadic-macros