我有一个“Serializable”接口类,它有
struct Serializable {
virtual void write(std::ostream& os = std::cout) const = 0;
virtual void read(std::istream& is = std::cin) = 0;
};
这样派生的实现可以有一个简单的形式,如:
void write(std::ostream& os = std::cout) {os<<*this}
void read(std::istream& is = std::cin) {is>>*this}
通过让相关的运算符由相应的iostream派生词重载来处理所有类型的ostream对象:
std::istream& operator>>(std::istream& is, Vec2D& rhs_vec) {...}
和
//I.
std::ifstream& operator>>(std::ifstream& ifs, Vec2D& rhs_vec) {...}
//intellisense thinks the above line is an overload for
//std::ifstream&>>size_t
或:
std::ifstream& operator>>(std::ifstream ifs, Document<Shape>& document)
{
size_t siz;
ifs >> siz; //II. the >> is red curly underlined by intellisense
document.setCapacity(siz);
...
}
评论II标记的行。是我在标题中写的intellisense错误的地方,提到了注释I标记的定义,其中2个类似的定义是std :: ifstream&amp;&gt;&gt; size_t的可能重载。
当std :: ifstream&amp;&gt;&gt; size_t显然不是这样的(或者是这些)时,它们究竟是什么呢?
我的设计是否存在根本性的错误,还是仅仅是一些智能的疯狂?