在Log时参数是类型和个数是不固定的,所以在做log函数时,很多烦恼,不过C++11给我们带来的希望
这个是今天刚读到的,加上自己的理解为字节写了一个logger类,也给大家瞧瞧啊,欢迎大虾拍板转
- #include <fstream>
- #include <iostream>
- using namespace std;
- class Logger {
- public:
-
-
-
- static ostream * _out_os;
-
-
-
- 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) {
- if (_logger_is_on) {
-
-
-
- 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;
-
-
-
- #define log(...) Logger::log(__FILE__,' ',__LINE__,' ',__func__,"():",__VA_ARGS__)
无图无真相,还是来张图吧
另外就是,我用的是g++ 4.7 编译的时候加上-std=c++11