如果您只是重新创建 ifstream 类>>您如何重载运算符?
How do you overload operator>> if you are just recreating the ifstream class?
我的老师想让我们学习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++映射:具有自定义类的运算符[]不起作用(总是返回0)
- 使用C++中的模板和运算符重载执行矩阵运算
- 为什么这个运算符<重载函数对 STL 算法不可见?
- 增量运算符与后缀混淆
- 一个关于在C++中重载布尔运算符的问题
- 运算符C++ "delete []"仅删除 2 个前值
- 模板类无法识别友元运算符
- 我可以使用条件运算符初始化C风格的字符串文字吗
- 关闭||运算符优化
- 通过继承类使用来自不同命名空间的运算符
- C++Cast运算符过载
- 如何使用AngelScript注册SFML Vector2运算符
- 重载元组索引运算符-C++
- 如何使用重载的相等(==)运算符向测试用例添加描述
- 为什么Mat类的两个对象可以在不重载运算符+的情况下添加
- 多个If语句与使用逻辑运算符计算条件的单个语句的比较
- 布尔比较运算符是如何在C++中工作的
- 重载运算符new[]的行为取决于析构函数
- 是否需要使用 - &gt;运算符在C 中调用成员函数时