具有不同参数的同名宏

vic*_*ico 8 c++ macros visual-c++

是否可以有2个具有相同名称但不同参数的宏?像这样的东西:

#define FI(value) do {l<<value;  Doit(l); } while(0)
#define FI(value, level) do {l<<value ; Doit(l,level); } while(0)
Run Code Online (Sandbox Code Playgroud)

Alo*_*ave 9

这不可能.
无法重新定义符号名称.与函数不同,宏不能重载.可以想象它逻辑宏用于纯文本替换,那么如何为同一个实体替换两个不同的东西呢?

另一种更好的解决方案:
您可以编写内联函数来实现相同的结果.它为您提供了类型检查的额外优势,使您免于宏的黑暗副作用.


小智 6

这会起作用。

#define FI(value, ...) FI_(value, ##__VA_ARGS__, 2, 1)
#define FI_(value, level, n, ...) FI##n(value, level)
#define FI1(value, ...) do {l << value; Doit(l);} while (0)
#define FI2(value, level) do {l << value; Doit(l, level);} while (0)
Run Code Online (Sandbox Code Playgroud)