C++ 如何使操作员过载>&燃气轮机;如果您只是在重新创建ifstream类?

C++ 如何使操作员过载>&燃气轮机;如果您只是在重新创建ifstream类?,c++,operator-overloading,iostream,ifstream,C++,Operator Overloading,Iostream,Ifstream,我的老师想让我们学习ifstream课程及其工作原理。她给了我们家庭作业来创建一个FileStream包装类,该类被模板化以处理任何内容,并且可以接收文件中的任何内容 我已经写了所有的东西,但是我不能让它编译,因为我不知道如何编写>操作符,并且不断地得到错误。这就是我到目前为止所做的: template<class A> ifstream& operator >>(FileStream<A> fs, A& x){ fs>>x;

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

我已经写了所有的东西,但是我不能让它编译,因为我不知道如何编写
>
操作符,并且不断地得到错误。这就是我到目前为止所做的:

template<class A>
ifstream& operator >>(FileStream<A> fs, A& x){
  fs>>x;
  return fs;
}
模板
ifstream和operator>>(文件流fs、A和x){
fs>>x;
返回fs;
}
她主要用来检查我们的工作,这被称为:

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

while(input>> temp){
  cout<<temp<<endl;
}
FileStream输入;
单词temp//word是我们创建的一个类,用于以特定方式操纵字符串
同时(输入>>温度){
cout
模板
FileStream&operator>>(FileStream&fs、T&value){
value=fs.readValueFromStream();
返回fs;
}
您的方法应该与上面的类似。突出显示:

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

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

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

    但是,readItemFromStream()是什么呢方法?你是否重新打开该文件并将其作为普通的ifstream读取?@user1828256问得好。也许你可以将其作为一个单独的后续问题发布,并链接回这个问题。我认为我今晚无法正确回答它。我实际上只是在构造函数中创建了一个数组,将所有内容加载到该数组中,现在我的>>操作符读取了m该数组并删除其中的第一个对象,直到不再
    template<class T>
    FileStream<T>& operator >> (FileStream<T>& fs, T& value) {
      value = fs.readValueFromStream();
      return fs;
    }