在C++中尝试封装为函数

尝试封装为函数

我们以函数默认参数的形式来进行封装,可以写出形如下面的代码:

复制代码
#include <iostream>
#include <string>

void debug_log(const std::string& msg
               , const char* const file = __FILE__
               , const char* const fun  = __func__
               , const int         line = __LINE__
               ) {
    printf("Debug:[File:%s][Fun:%s][Line:%d] %s", file, fun, line, msg.c_str());
}

int main() {
    debug_log("use debug log\n");
}

将这段代码在各种编译其中尝试会因为 const char* const fun = func 产生各种七七八八的错误都会出现:

  • 直接无法编译
  • 编译运行成功,但是会报警告
  • 运行打印垃圾数据
  • 运行打印空串

原因主要在于 warning: 'func' is not defined outside of function scope。也就是说 func 仅在函数体内可用。

并且 LINE 所替换成的常量也是在函数的参数位置的行号。

因此这种方式无法满足我们的需求。

相关推荐
lqqjuly1 分钟前
超分辨率算法深度解析(Super-Resolution Algorithms)
算法
加号35 分钟前
【C#】 Web API 自定义配置函数请求路径:从路由本质到灵活架构设计
开发语言·c#
郝学胜_神的一滴9 分钟前
Qt 高级开发 026:QTabWidget御道,从筑基到化境
c++·qt
KANGBboy10 分钟前
java知识四(面向对象编程)
android·java·开发语言
雪的季节16 分钟前
矢量数据提取分析(甲方平台)
开发语言
ZC跨境爬虫32 分钟前
跟着 MDN 学 JavaScript day_1:什么是 JavaScript?
开发语言·前端·javascript·ecmascript
apocelipes40 分钟前
GNU GCC 多版本函数扩展
c语言·c++·linux编程
qq_2518364571 小时前
基于java Web 日化商超库存管理系统设计与实现
java·开发语言·前端
破土士V1 小时前
【Java基础语法10】继承、多态、抽象类接口、字符串与异常等
java·开发语言
代码中介商1 小时前
C++完美转发与引用折叠全解析
开发语言·c++