我有一個函數,旨在將配置文件中的字符串轉換爲各種不同的類型。需要插入一個特殊情況來處理bool,因爲在使用字符串流時,「false」等同於true。使用模板進行類型轉換有奇怪的行爲
單獨的函數並不是一個真正的選項,因爲它將涉及我們正在使用的每種類型的類型檢查。
當一個類的一部分之前,該函數正常工作,但是爲了使它更易於使用,它被移入了它自己的啓動函數中。該函數在返回true時拋出2個錯誤。返回錯誤如預期的那樣。
下面是代碼示例和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的(常量的std :: basic_string的< _Elem,_Traits,_AX> &)':不能從轉換參數1'布爾 '到 '常量性病:: basic_string的< _Elem,_Traits,_AX> &'
錯誤2錯誤C2664:' 的std :: basic_string的< _Elem,_Traits,_AX> :: basic_string的(常量的std :: basic_string的< _Elem ,_Traits,_Ax> &)':不能將參數1從'bool'轉換爲'const std :: basic_string < _Elem,_Trai ts,_Ax> &'
http://ideone.com/1ZqKf編譯好。 –
調用它bool b = StringCast(「true」);在VS2010下正常工作 –
marcinj
@luskan不要誤導OP:http://ideone.com/0AKMJ – PiotrNycz