我有一个日志记录方法,该方法将显示一些用于日志记录控制台输出的其他信息:
Log.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的行号?我的编码风格禁止预处理器使用,除了文件包含/包含保护。
答案 0 :(得分:0)
我建议您如下修改代码:
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))