這會導致由於額外的空格問題:問題的boost ::詞彙投
std::string t("3.14 ");
double d = boost::lexical_cast<double> (t);
所以,我寫了這個
template<typename T>
T string_convert(const std::string& given)
{
T output;
std::stringstream(given) >> output;
return output;
}
double d = string_convert<double> (t);
什麼可以是這個問題?有沒有更好的辦法?更喜歡使用詞法轉換
重要的是,上面的'string_convert'模板不只是方便忽略空格:如果還忽略尾隨非空白,可能也預示無效值。 'trim'確實更健壯,或者你可以改變'string_convert' ala'char c; std :: stringstream ss(given); if(!(ss >> output)||(ss >> c))...'。 – 2011-04-08 05:44:16
如果你想要一個忽略尾隨空格的轉換函數,你應該這樣做:'std :: stringstream(given); if(!(s >> output >> ws)|| s.get()!= EOF)throw ...' – 2011-04-08 09:41:00