我的老师希望我们学习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天,我无法得到它。
答案 0 :(得分:1)
template<class T>
FileStream<T>& operator >> (FileStream<T>& fs, T& value) {
value = fs.readValueFromStream();
return fs;
}
您的方法应如下所示。亮点:
(请注意,我已将A
重命名为T
,将x
重命名为value
。T
是通用模板参数的通常名称,并且value
比x
更具描述性。)
FileStream<T>&
引用。 &
确保您使用原始流对象而不是副本。FileStream<T>&
引用,而不是ifstream
。fs>>x
,这只是对我们所处理的方法的递归调用,您需要编写代码来实际读取流中的项并将其放入value
。这应该使用FileStream
类的某些方法。我写了value = fs.readValueFromStream()
,但这可能是任何事情。这样operator >>
就像语法糖一样。真正的工作是由value = fs.readValueFromStream()
行(或者你实际在那里写的任何代码)完成的。