c++ - 定义易于维护的函数入口退出记录器时如何避免使用宏
问题描述
我希望编写一个具有两个主要目标的函数进入/退出记录器:
- 不要像
__func__
在每个函数中那样引用隐式变量。(因为如果我想__PRETTY_FUNCTION__
在我有 gcc 时使用,那么对于 ex 会有很多改变) - 避免使用宏。
但我不知何故无法实现目标 2。
我能做的最好的如下:
#define LOG_ENTRY_EXIT() entry_exit_logger e(__func__);
using func_name_type = const char*;
class entry_exit_logger{
public:
entry_exit_logger(const func_name_type fname) : func_name(fname){
std::cout << "-------Enter: " << func_name << "------" << std::endl;
}
~entry_exit_logger(){
std::cout << "-------Exit: " << func_name << "------" << std::endl;
}
private:
const func_name_type func_name;
};
void test_entry_exit(){
LOG_ENTRY_EXIT();
}
int main(){
test_entry_exit();
return 0;
}
我怎么能不使用宏来做到这一点?或者这是适当使用宏的示例?
解决方案
推荐阅读
- gcc - '[' 的装配问题
- asp.net-mvc - 如何修复此 NullReferenceException:当我尝试将项目从数据库显示到 ddl 时,对象引用未设置为对象错误的实例
- php - 将数组文本文件转换为php中的数组
- react-native - React-Native Android Redux 存储清理问题
- c# - 向数据库添加列,绑定gridview 不更新C#/winforms/SQL
- typo3 - TYPO3 内联关系记录编辑 (IRRE)
- intellij-idea - 如何跳转到同一个文件中的类声明?
- matlab - Matlab中SQL数据库的并行计算数据提取
- jmeter - 使用 Apache Jmeter 进行 JPOS 测试(功能和性能)
- vb.net - 调用带有两组括号和 Of 关键字的 VB 类方法是什么意思?