📄 stringparser.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 + -