去格式控制符的输出写法

#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
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值