【发布时间】:2017-10-23 01:57:23
【问题描述】:
我有一个函数read(),它使用ifstream 从图像中读取数据。我还为与read() 具有完全相同定义的图像重载了I/O 运算符>>,除了operator >> 在istream 上工作。
void read (string filename);
std::istream & operator >> (std::istream & is, Image & img); //overload >> operator
//same definition for both
有什么方法可以实现一个通用函数,可以同时用于read() 和operator>> 重载?
【问题讨论】:
-
你需要一个对
ifstream的常量引用来延长它的生命周期,它也需要作为最后一个参数,因为它将是默认参数。因此,operator>>将不起作用。所以,不,没办法。此外,这些功能不做同样的事情。read()不会在任何地方返回图像。 -
@Incomputable 你是在暗示可以在
const istream上执行读取操作,这怎么可能。 -
@PasserBy,我也忘了提这个问题。但是,嘿,我们有很好的老
const_cast<>()并希望它不会炸毁世界。 -
@Incomputable 不,你不会,重载左值和右值引用
-
@PasserBy,编译器能消除歧义吗?
标签: c++ generics stream inputstream