我有一个旨在将字符串从配置文件转换为各种不同类型的函数。当使用字符串流时,需要插入一个特殊情况来处理布尔值,因为“假”等于真。
单独的函数并不是一个真正的选择,因为它会涉及对我们正在使用的每种类型的类型检查。
该函数在以前是类的一部分时可以正常工作,但是为了使其更有用,它被移到了自己的启动函数中。该函数在返回 true 时抛出 2 个错误。返回 false 符合预期。
下面是代码示例和 Visual Studio 抛出的错误。
template <typename T>
static T StringCast(string inValue)
{
if(typeid(T) == typeid(bool))
{
if(inValue == "true")
return true;
if(inValue == "false")
return false;
if(inValue == "1")
return true;
if(inValue == "0")
return false;
return false;
}
std::istringstream stream(inValue);
T t;
stream >> t;
return t;
}
错误 1 错误 C2664: 'std::basic_string<_Elem,_Traits,_Ax>::basic_string(const std::basic_string<_Elem,_Traits,_Ax> &)' : 无法将参数 1 从 'bool' 转换为 'const std: :basic_string<_Elem,_Traits,_Ax> &'
错误 2 错误 C2664: 'std::basic_string<_Elem,_Traits,_Ax>::basic_string(const std::basic_string<_Elem,_Traits,_Ax> &)' : 无法将参数 1 从 'bool' 转换为 'const std: :basic_string<_Elem,_Traits,_Ax> &'