Nic*_*oni 22 c++ c-preprocessor
我习惯了这个:
class Db {
_Commit(char *file, int line) {
Log("Commit called from %s:%d", file, line);
}
};
#define Commit() _Commit(__FILE__, __LINE__)
Run Code Online (Sandbox Code Playgroud)
但最大的问题是我重新定义了Commit
全局这个词,而在一个400k行的应用程序框架中,这是一个问题.而且我不想使用像这样的特定词DbCommit
:我不喜欢冗余db->DbCommit()
,或者在任何地方手动传递值:db->Commit(__FILE__, __LINE__)
最糟糕的.
那么,有什么建议吗?
Joh*_*ing 50
所以,你正在寻找使用文件和行信息进行日志记录(或其他东西),而你宁愿不使用宏,对吧?
在一天结束时,它根本无法在C++中完成.无论你选择什么机制 - 内联函数,模板,默认参数或其他东西 - 如果你不使用宏,你最终会得到日志函数的文件名和亚麻,而不是呼叫点.
使用宏.这是一个真正无法更换的地方.
即使是C++常见问题解答说宏有时也是两个邪恶中的较小者.
正如Nathon在下面的评论中所说,在你使用宏的情况下,最好明确一下.给你的宏宏名称,COMMIT()
而不是Commit()
.这将使维护人员和调试人员清楚地知道正在进行宏调用,并且在大多数情况下它应该有助于避免冲突.两件好事.