【发布时间】:2015-06-08 06:48:29
【问题描述】:
我的代码库已有一个宏:
#define SOME_MACRO <macro definition>
对于我正在进行的一些更改,我想添加一个带有参数的新版本的宏。
#define SOME_MACRO(arg1) <macro definition>
我看到这个question 地址是从宏的多个参数版本中选择的。但是, SOME_MACRO 调用还没有括号。它用作 SOME_MACRO,而不是 SOME_MACRO()。有没有办法实现宏重载,使得 SOME_MACRO 调用 SOME_MACRO()。我试过了:
#define SOME_MACRO SOME_MACRO()
#define SOME_MACRO(...) <macro definition using __VA_ARGS__>
但这只是给我一个宏重新定义错误。在呼叫现场,这是目前的样子:
SOME_MACRO << "This is a test";
我想添加表单的新调用:
SOME_MACRO(foo) << "This is a test";
我希望这两个调用都能正常工作,因为前者已经在代码库中。这些基本上是日志记录宏,它们创建公开流的对象。在销毁时,它们会写出流内容。
【问题讨论】:
-
你不能“重载”宏,这是不可能的。