2

我的老师希望我们学习 ifstream 课程及其工作原理。她给我们布置了创建一个 FileStream 包装类的作业,该类被模板化以处理任何内容,并且可以接收文件中的任何内容。

我已经编写了所有内容,但无法编译,因为我不知道如何编写>>运算符并不断收到错误。这是我到目前为止所拥有的:

template<class A>
ifstream& operator >>(FileStream<A> fs, A& x){
  fs>>x;
  return fs;
}

她主要用来检查我们的工作,它的名称如下:

FileStream<Word> input;
Word temp; //word is a class we created to manipulate strings in certain ways 

while(input>> temp){
  cout<<temp<<endl;
}

如果有人可以帮助我,我将不胜感激。我已经为此工作了 2 天,但我无法得到它。

4

1 回答 1

1
template<class T>
FileStream<T>& operator >> (FileStream<T>& fs, T& value) {
  value = fs.readValueFromStream();
  return fs;
}

您的方法应该类似于上面的内容。强调:

(请注意,我已重命名AT和.是通用模板参数的常用名称,并且x比.更具描述性。)valueTvaluex

  1. 接受FileStream<T>&参考。这&确保您使用原始流对象而不是副本。
  2. 返回一个FileStream<T>&引用,而不是一个ifstream.
  3. fs>>x您需要编写代码来实际从流中读取一个项目并将其放入value. 这应该使用您FileStream班级的某些方法。我写了value = fs.readValueFromStream(),但这可能是任何事情。

以这种方式operator >>作为语法糖。真正的工作是由value = fs.readValueFromStream()行(或您实际在那里编写的任何代码)完成的。

于 2012-11-16T00:24:37.210 回答