gpt4 book ai didi

c++ - 将调用者 __FILE__ __LINE__ 传递给函数而不使用宏

转载 作者:IT老高 更新时间:2023-10-28 21:38:17 25 4
gpt4 key购买 nike

我已经习惯了:

class Db {
_Commit(char *file, int line) {
Log("Commit called from %s:%d", file, line);
}
};

#define Commit() _Commit(__FILE__, __LINE__)

但最大的问题是我在全局范围内重新定义了 Commit 这个词,而在 400k 行的应用程序框架中这是一个问题。而且我不想使用像 DbCommit 这样的特定词:我不喜欢像 db->DbCommit() 这样的冗余,或者在任何地方手动传递值: db->Commit(__FILE__, __LINE__) 最差。

那么,有什么建议吗?

最佳答案

所以,您希望使用文件和行信息进行日志记录(或其他操作),并且您不想使用宏,对吗?

归根结底,它根本无法用 C++ 完成。无论您选择什么机制——内联函数、模板、默认参数或其他——如果你不使用宏,你最终会得到日志函数的文件名和行号,而不是调用点。

使用宏。这是它们真正不可替代的地方。

编辑:

即使是 C++ FAQ说宏有时是两害相权取其轻。

编辑2:

正如 Nathon 在下面的评论中所说,如果您确实使用了宏,最好明确说明。给你的宏命名,比如 COMMIT() 而不是 Commit()。这将使维护人员和调试人员清楚地知道正在进行宏调用,并且在大多数情况下它应该有助于避免冲突。都是好东西。

关于c++ - 将调用者 __FILE__ __LINE__ 传递给函数而不使用宏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4196431/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com