你如何重载运算符>>如果你只是重新创建ifstream类?

时间:2012-11-16 00:17:14

标签: c++ operator-overloading iostream ifstream

我的老师希望我们学习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天,我无法得到它。

1 个答案:

答案 0 :(得分:1)

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

您的方法应如下所示。亮点:

(请注意,我已将A重命名为T,将x重命名为valueT是通用模板参数的通常名称,并且valuex更具描述性。)

  1. 接受FileStream<T>&引用。 &确保您使用原始流对象而不是副本。
  2. 返回FileStream<T>&引用,而不是ifstream
  3. 而不是在方法中执行fs>>x,这只是对我们所处理的方法的递归调用,您需要编写代码来实际读取流中的项并将其放入value。这应该使用FileStream类的某些方法。我写了value = fs.readValueFromStream(),但这可能是任何事情。
  4. 这样operator >>就像语法糖一样。真正的工作是由value = fs.readValueFromStream()行(或者你实际在那里写的任何代码)完成的。