如何强制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;
- }