如何强制 std::stringstream 运算符 >> 读取整个字符串而不是停在第一个空格处?
我有一个模板类,用于存储从文本文件读取的值:
template <typename T>
class ValueContainer
{
protected:
T m_value;
public:
/* ... */
virtual void fromString(std::string & str)
{
std::stringstream ss;
ss << str;
ss >> m_value;
}
/* ... */
};
我尝试过设置/取消设置流标志,但没有帮助。
澄清
该类是一个容器模板,可以自动与 T 类型进行转换。字符串只是该模板的一个实例,它还必须支持其他类型。这就是为什么我想强制运算符 >> 模仿 std::getline 的行为。
由于当 T=string 时,>> 不能满足我们的要求,我们可以为 [T=string] 的情况编写一个特定的函数。这可能不是正确的解决方案。但是,正如解决方法所提到的。
如果不能满足您的要求,请纠正我。
我写了一个示例代码如下:
#include <iostream>
#include <sstream>
#include <string>
using namespace std;
template <class T>
class Data
{
T m_value;
public:
void set(const T& val);
T& get();
};
template <class T>
void Data<T>::set(const T& val)
{
stringstream ss;
ss << val;
ss >> m_value;
}
void Data<string>::set(const string& val)
{
m_value = val;
}
template <class T>
T& Data<T>::get()
{
return m_value;
}
int main()
{
Data<int> d;
d.set(10);
cout << d.get() << endl;
Data<float> f;
f.set(10.33);
cout << f.get() << endl;
Data<string> s;
s.set(string("This is problem"));
cout << s.get() << endl;
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)