【问题标题】:Capture __LINE__ and __FILE__ without #define在不使用 #define 的情况下捕获 __LINE__ 和 __FILE__
【发布时间】:2016-04-25 21:39:08
【问题描述】:

尝试为以下 C 样式代码确定“现代”实现:

#define logError(...) log(__FILE__, __LINE__, __VA_ARGS__)

是否可以使用不依赖 #define 的可变参数模板或类似的东西来捕获它?

所需用例:

logError( "Oh no! An error occurred!" );

__FILE____LINE__ 在后台被捕获,但反映了调用 logError 的文件名和行号。

【问题讨论】:

  • 我认为不可能。宏的存在是有原因的,您可以在必要时使用它。
  • 您有点要求使用这种日志记录创建软断点。

标签: c++ c++11


【解决方案1】:

宏确实是您唯一的选择,至少在std::source_location 使其成为标准并满足您的愿望之前。

【讨论】:

【解决方案2】:

实际上,当您想要处理行号和文件名时,预处理器是唯一的选择。

对于编译器,不能使用行号和文件名作为函数调用的参数(或将它们存储在变量中)。

在我的公司,我们在日志记录方面遇到了完全相同的问题。我们最终得到了一个外部脚本扫描源文件,然后构建适当的函数来调用。

【讨论】:

    猜你喜欢
    • 2010-10-10
    • 1970-01-01
    • 2013-10-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-04
    • 1970-01-01
    相关资源
    最近更新 更多