#ifndef _LOGGER_H_ #define _LOGGER_H_ #include #include #include #include class logger { private: std::stringstream _logLine; public: logger(); template void log(const char* s, const Args&... args) { _logLine.str(""); log_internal(s, args...); } private: void log_internal(const char* s); template void log_internal(const char* s, const T& value, const Args&... args) { while (*s) { if (*s == '%' && *++s != '%') { _logLine << value; return log_internal(s, args...); } _logLine << *s++; } throw std::runtime_error("extra arguments provided"); } }; extern logger ulog; #endif // _LOGGER_H_