这是一个特殊情况,宏不仅是首选,它们实际上是完成某些事情的唯一方法.
如果你想编写一个记录功能,它不仅记录一些消息,而且记录实例发生的位置的文件和行号,你可以直接调用你的函数,直接输入文件和行值(或宏):
LogError("Something Bad!", __FILE__, __LINE__);
Run Code Online (Sandbox Code Playgroud)
...或者,如果您希望它自动运行,您必须依赖宏(警告:未编译):
#define LogErrorEx(ERR) (LogError(ERR, __FILE__, __LINE__))
// ...
LogErrorEx("Something Else Bad!");
Run Code Online (Sandbox Code Playgroud)
使用模板,默认参数,默认构造或C++中的任何其他设备无法实现这一点.