如何将字符串转换为模板类型 我正在用C++编写程序,今天我面临以下问题,我想知道有没有人能帮助或解释如何解决它。 基本上我已经处理了模板类,其中一个方法应该将用户的输入作为字符串值,将其转换为模板值并返回。 下面是代码的外观: T HashTable<T>::insertValue() { T value; string str; cout << "Insert value please" << endl; getline(cin,str); stringstream convert(str); convert >> value; return value; } T哈希表::insertValue() { T值; 字符串str; 库特值; 返回值; }

如何将字符串转换为模板类型 我正在用C++编写程序,今天我面临以下问题,我想知道有没有人能帮助或解释如何解决它。 基本上我已经处理了模板类,其中一个方法应该将用户的输入作为字符串值,将其转换为模板值并返回。 下面是代码的外观: T HashTable<T>::insertValue() { T value; string str; cout << "Insert value please" << endl; getline(cin,str); stringstream convert(str); convert >> value; return value; } T哈希表::insertValue() { T值; 字符串str; 库特值; 返回值; },c++,C++,它工作得非常好,直到我输入字符串——如果我输入整个句子——转换后,第一个空格后的部分丢失。 有什么办法可以避免吗?像这样的事情 template<typename T> T getline_as( std::istream& s ); template<> std::string getline_as<std::string>( std::istream& s ) { std::string str; std::getline

它工作得非常好,直到我输入字符串——如果我输入整个句子——转换后,第一个空格后的部分丢失。 有什么办法可以避免吗?

像这样的事情

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);
}
模板
T getline_as(标准::istream&s);
模板
std::string getline_as(std::istream&s)
{
std::字符串str;
std::getline(s,str);
返回str;
} 
模板
T getline_as(标准::istream&s)
{
std::stringstream转换(getline_as);
T值;
转换>>值;
返回值;
}
T哈希表::insertValue()
{

您可以用什么类型实例化模板?这一行
convert>>value;
是问题所在。
>
操作符停止读取空白处的输入。我有几个字符串、int、double、float和chars类的实例为
std::string
提供了专门化。看起来您正在尝试重新实现boost::lexical_cast.谢谢,帮了我的忙!我不明白为什么需要第一个前向声明…??@JanMüller:只是因为在声明模板之前不能引入专门化。如果在专门化之前定义了一般情况,则不需要声明……但这在这里是不可能的,因为艾尔·凯斯称之为具体案例。