我正在用c ++编写程序,今天我面临以下问题,我想知道是否有人可以帮助或解释如何解决它。 基本上我处理模板类,其中一个方法应该从用户输入一个字符串值,将其转换为模板值并返回。 代码如下所示:
T HashTable<T>::insertValue()
{
T value;
string str;
cout << "Insert value please" << endl;
getline(cin,str);
stringstream convert(str);
convert >> value;
return value;
}
它完全正常,直到我输入字符串 - 如果我输入整个句子 - 转换后第一个空格丢失后的部分。 有没有办法避免这种情况?
答案 0 :(得分:4)
这样的东西?
template<typename T>
T getline_as( std::istream& s );
template<>
std::string getline_as<std::string>( std::istream& s )
{
std::string str;
std::getline(s,str);
return str;
}
template<typename T>
T getline_as( std::istream& s )
{
std::stringstream convert(getline_as<std::string>(s));
T value;
convert >> value;
return value;
}
T HashTable<T>::insertValue()
{
cout << "Insert value please" << endl;
return getline_as<T>(cin);
}