首页 > 解决方案 > 没有预处理器的调用方法/文件的文件名/行号

问题描述

我有一个日志记录方法,该方法应显示一些用于记录控制台输出的附加信息:

日志.hpp:

template<typename... ARGS>
__attribute__((always_inline)) inline static constexpr void log(const ARGS&... args)
{
    std::cout << __FILE__ << "#" << __LINE__; // << args...
}

和调用文件 A.cpp:

log("hello");

当显示控制台消息时,文件名和行号——当然——取自 Log.hpp。但目的是知道从哪里调用 log 方法。

除了预处理器定义之外,有什么东西可以用来从 A.cpp 中获取文件名 (A.cpp) 和行号吗?我的编码风格禁止使用预处理器,但文件包含/包含保护除外。

标签: c++

解决方案


我建议你修改你的代码如下:

template<typename... ARGS>
__attribute__((always_inline)) inline static constexpr void log(const char* fileName, int lineNumber,const ARGS&... args)
{
    std::cout << fileName << "#" << lineNumber; // << args...
}

然后:

log(__FILE__, __LINE__, "hello");

编辑1

也试试这个...

#define log(message) log(__FILE__, __LINE__, (message))

推荐阅读