c++ - 没有预处理器的调用方法/文件的文件名/行号
问题描述
我有一个日志记录方法,该方法应显示一些用于记录控制台输出的附加信息:
日志.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) 和行号吗?我的编码风格禁止使用预处理器,但文件包含/包含保护除外。
解决方案
我建议你修改你的代码如下:
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))
推荐阅读
- amazon-web-services - Auto Scaling 组 EC2 实例启动失败
- django - 如何按顺序对购物车物品进行排序
- json - Json 模式验证:基于同一 json 中不同对象的属性的必需属性
- powershell - Windows 使用 jq 尾随日志文件
- python-3.x - Python 将 XXXXX 导入为 XX 与从 XXXXX 导入 *
- html - html 表格中的图像 - 将高度和宽度设置为适合屏幕
- api - 嵌入带声音的 Reddit 视频
- css - 小屏幕问题中的Boostrap网格系统
- javascript - React + Recharts 图例无法正常工作
- elasticsearch - 映射到同一分片的 Elasticsearch 路由键的行为