我已经实现了一个基于Xerces-c的简单C ++库,用于解析和读取XML配置文件中的数据项。我提供了将读取的数据类型转换为int,long,double,bool,float和string的工具。
除了std :: string之外,所有项目都可以正常工作,因为std :: string不需要任何转换。我只想比较使用特征和返回值,但这不起作用。 is_same仅适用于内置类型吗?
template<typename T> T CppXMLConfigReader::getTypeVal(const std::string& key, const T& defaultVal) const
{
T returnVal = defaultVal;
auto iter = m_configMapItems.find(key.c_str());
if(iter != m_configMapItems.end())
{
try
{
if(is_same<T,int>::value)
returnVal = stoi(iter->second);
if(is_same<T,float>::value)
returnVal = stof(iter->second);
if(is_same<T,long>::value)
returnVal = stol(iter->second);
if(is_same<T,double>::value)
returnVal = stod(iter->second);
if(is_same<T,bool>::value)
{
if(iter->second == "true" || iter->second == "1")
returnVal=true;
else
returnVal=false;
}
if(is_same<T,string>::value) // Error is from here.
returnVal = iter->second; // Error is from here.
}
catch(const invalid_argument& e)
{
cout << "Exception happened while converting " << iter->second << " Into rqequired type. Please investigate." << endl;
}
}
return(returnVal);
}