⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 stringparser.h

📁 基于stl使用的扩展,方便的把字符串转成任意类型
💻 H
字号:
#pragma once

#include <boost/lexical_cast.hpp>
#include <objbase.h>


namespace stringparser
{
	template <class T> 
	inline 
	bool Parse(LPCWSTR sz, T* pv)
	{
		if (sz == NULL)
			return false;
		try
			{ *pv = boost::lexical_cast<T>(sz); }
		catch(boost::bad_lexical_cast &)
			{ return false; }
		return true;
	}

	template <>
	inline 
	bool Parse(LPCWSTR sz, INT64* pv)
	{
		if (sz[0] == 0)
			return false;
		WCHAR* pEnd = (WCHAR*)sz;
		UINT64 ret = _wcstoi64(sz, &pEnd, 10);
		if (pEnd == sz)
			return false;
		*pv = ret;
		return true;
	}
	template <>
	inline 
	bool Parse(LPCWSTR sz, UINT64* pv)
	{
		if (sz[0] == 0)
			return false;
		WCHAR* pEnd = (WCHAR*)sz;
		UINT64 ret = _wcstoui64(sz, &pEnd, 10);
		if (pEnd == sz)
			return false;
		*pv = ret;
		return true;
	}
	template <>
	inline 
	bool Parse(LPCWSTR sz, LPCWSTR* pv)
	{
		*pv = sz;
		return true;
	}
	template <>
	inline 
	bool Parse(LPCWSTR sz, std::wstring* pv)
	{
		if (sz == NULL)
			pv->clear();
		else
			pv->assign(sz);
		return true;
	}
	template <>
	inline 
	bool Parse(LPCWSTR sz, bool* pv)
	{
		if (sz == NULL)
			return false;
		if (wcsicmp(sz, L"false") == 0)
			*pv = false;
		else if (wcsicmp(sz, L"true") == 0)
			*pv = true;
		else
			return false;
		return true;
	}
	template <>
	inline 
	bool Parse(LPCWSTR sz, GUID* pv)
	{
		if (sz == NULL)
			return false;
		GUID v;
		if (FAILED(::CLSIDFromString((LPOLESTR)sz, &v)))
			return false;
		*pv = v;
		return true;
	}


	//////////////////////////////////////////////////////////////////////////
	

	template <class T>
	inline 
	T Parse2(LPCWSTR sz, const T& defV = T())
	{
		T v;
		if (! Parse(sz, &v))
			return defV;
		return v;
	}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -