C++11可变参数函数模板

C++11可变参数函数模板

在Log时参数是类型和个数是不固定的,所以在做log函数时,很多烦恼,不过C++11给我们带来的希望羡慕

这个是今天刚读到的,加上自己的理解为字节写了一个logger类,也给大家瞧瞧啊,欢迎大虾拍板转

                    

#include <fstream> #include <iostream> using namespace std; class Logger { public: /** * @brief _out_os log输出的地方,默认是std::cout,给赋值时最好是全局变量 */ static ostream * _out_os; /** * @brief _logger_is_on 开关 */ static bool _logger_is_on; static void makeLoggerOn() { _logger_is_on = true; } static void makeLoggerOff() { _logger_is_on = false; } static bool loggerState() { return _logger_is_on; } template<typename... Aargs> static void log(const Aargs&... args) {//这边使用了C++11的可变参数函数模板的特性,说白了,还是递归调用 if (_logger_is_on) { //此处编译器会判断参数的个数,如果是一个则调用logHelper(ostream& os, const T& t1) //否则这是下面的logHelper(ostream& os, const T& t1, const Tn&... args),其自身递归调用,直到只有一个参数,从 //logHelper(ostream& os, const T& t1)作为出口出来 logHelper(*_out_os,args...); *_out_os << endl; } } protected: template<typename T> static void logHelper(ostream& os, const T& t1) { os << t1; } template<typename T, typename... Tn> static void logHelper(ostream& os, const T& t1, const Tn&... args) { os << t1 << ' '; logHelper(os,args...); } }; ostream * Logger::_out_os = & std::cout; bool Logger::_logger_is_on = false; //__func__ 当前的函数名 //__VA_ARGS__,可变参宏 #define log(...) Logger::log(__FILE__,' ',__LINE__,' ',__func__,"():",__VA_ARGS__)

无图无真相,还是来张图吧

另外就是,我用的是g++ 4.7 编译的时候加上-std=c++11

C++11可变参数函数模板

转载于:https://my.oschina.net/u/854744/blog/418207

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/109445.html原文链接:https://javaforall.net

赞 (0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • Linux同步机制_进程同步机制

    Linux同步机制_进程同步机制Linux中的同步机制(一)–Futex引子在编译2.6内核的时候,你会在编译选项中看到[*]Enablefutexsupport这一项,上网查,有的资料会告诉你”不选这个内核不一定能正确的运行使用glibc的程序”,那futex是什么?和glibc又有什么关系呢?1.什么是FutexFutex是FastUserspacemuTexes的缩写,由Hubertus

    2022年9月14日
  • Windows 环境下载 Android 源码「建议收藏」

    Windows 环境下载 Android 源码「建议收藏」Windows环境下载Android源码前言Android官网(该方式不适合Windows平台):https://source.android.com/source/downloading.html可是我就想在Windows中使用SourceInsight看看源代码,当然可以!准备环境安装git安装Python自备梯子硬盘剩余容量最好大…

    2022年7月15日
  • 【转载】C#中的泛型

    【转载】C#中的泛型

    2021年11月20日
  • 关于浏览器报错:stack overflow at line: 0 的解决法

    关于浏览器报错:stack overflow at line: 0 的解决法本文主要是从程序猿的角度进行分析的,致力于提供解决问题的思路,而不是盲目的从网上百度关于页面错误:stackoverflowatline:0 很明白,就是堆栈的溢出!所以,导致的原因也很清楚,无非就是页面中出现了类似于递归式的无线循环而导致的,所以可能出现的原因就很明晰了:1.浏览器对图片,js等引用进入了无线循环这时候出错的原因,无非是图片路径不正确或者引用多个相同的js…

    2022年7月15日
  • ShuffleNet算法详解[通俗易懂]

    ShuffleNet算法详解[通俗易懂]论文:ShuffleNet:AnExtremelyEfficientConvolutionalNeuralNetworkforMobileDevices论文链接:https://arxiv.org/abs/1707.01083算法详解:ShuffleNet是Face++的一篇关于降低深度网络计算量的论文,号称是可以在移动设备上运行的深度网络。这篇文章可以和MobileNet

    2022年9月10日
  • vue生成二维码并保存图片_php二维码生成代码

    vue生成二维码并保存图片_php二维码生成代码图片地址生成二维码

    2022年9月5日

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号