#ifndef _HWLOGGERWRAPPER_H_20210202_
#define _HWLOGGERWRAPPER_H_20210202_
#include "hwsdk/hwLogger.h"
#include <sstream>
/*
* \brief hwLogger的功能包装(建议使用 只需要把定义和初始化处类型改成hwLoggerWrapper即可)
01 完全兼容hwLogger之前的写法(因为基类就是他)
02 采<<的形式代替格式控制符
03 字段之间格式自定义(当前是逗号分隔))
* \example
GameLogic::key_logger->logWrapper(&hwLogger::info, "[创建]", GetAccID(), GetID(), GetName());
或老方法
GameLogic::key_logger->info("[创建],%u, %u, %s", GetAccID(), GetID(), GetName());
*/
class hwLoggerWrapper :public hwLogger
{
public:
hwLoggerWrapper(const std::string& name, const std::string& strpath, bool isauot = false) :hwLogger(name, strpath, isauot)
{
}
~hwLoggerWrapper()
{
}
public:
template<typename FuncType, typename... ParamsType>
void logWrapper(FuncType func, ParamsType... params)
{
osstream.str("");
// 这种写法比递归效率好 而且递归编译生成的函数量也是巨大的 不推荐使用 虽然递归可以控制结尾执行
std::initializer_list<int>{(logCustom(params), 0)...};
//int a[] = {(logCustom(params), 0)...};
//logCustomRecursion(params...);
(this->*func)(osstream.str().c_str());
}
private:
ostringstream osstream;
// 暂时是为每个字段之间增加逗号
template<typename ParamType>
void logCustom(ParamType param)
{
osstream << param << ",";
}
template<typename ParamType>
void logCustomRecursion(const ParamType& param)
{
osstream << param;
}
template<typename ParamType, typename... ParamsType>
void logCustomRecursion(const ParamType& param, ParamsType... params)
{
//osstream << param << (sizeof...(params) > 0 ? ", " : "");
osstream << param << ",";
logCustomRecursion(params...);
}
};
#endif
去格式控制符的输出写法
最新推荐文章于 2024-03-29 12:36:29 发布