去格式控制符的输出写法

#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
已标记关键词 清除标记
相关推荐
©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页