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