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

How do you overload operator>> if you are just recreating the ifstream class?

本文关键字:gt 运算符 重载 何重载 ifstream 新创建 如果 创建      更新时间:2023-10-16

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

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

您的方法应类似于上述内容。突出:

(请注意,我已将A重命名为Tx重命名为valueT 是泛型模板参数的常用名称,valuex 更具描述性。

  1. 接受FileStream<T>&引用。&可确保使用原始流对象而不是副本。
  2. 返回FileStream<T>&引用,而不是ifstream
  3. 而不是在方法中执行fs>>x,这只是对我们正在使用的方法的递归调用,您需要编写代码以实际从流中读取项目并将其放入value。这应该使用FileStream类的某种方法。我写了value = fs.readValueFromStream()但这可能是任何东西。

通过这种方式,operator >>充当句法糖。真正的工作是通过value = fs.readValueFromStream()行(或你在那里实际编写的任何代码)完成的。