首页 > 解决方案 > 定义易于维护的函数入口退出记录器时如何避免使用宏

问题描述

我希望编写一个具有两个主要目标的函数进入/退出记录器:

  1. 不要像__func__在每个函数中那样引用隐式变量。(因为如果我想__PRETTY_FUNCTION__在我有 gcc 时使用,那么对于 ex 会有很多改变)
  2. 避免使用宏。

但我不知何故无法实现目标 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;
}

我怎么能不使用宏来做到这一点?或者这是适当使用宏的示例?

标签: c++

解决方案


推荐阅读