我的老师希望我们学习 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
重命名为 T
并将 x
重命名为 value
。T
是通用模板参数的常用名称,而 value
比 x
更具描述性。)
- 接受
FileStream<T>&
引用。&
确保您使用原始流对象而不是拷贝。 - 返回
FileStream<T>&
引用,而不是ifstream
。 - 不是在方法中执行
fs>>x
,这只是对我们所在方法的递归调用,您需要编写代码来实际从流中读取一个项目并将其放入value
。这应该使用你的FileStream
类的一些方法。我写了value = fs.readValueFromStream()
但这可以是任何东西。
在这种情况下,operator >>
充当语法糖。真正的工作是由 value = fs.readValueFromStream()
行(或您实际在此处编写的任何代码)完成的。
关于c++ - 如果您只是重新创建 ifstream 类,您如何重载运算符>>?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13408525/