“多个运算符>>匹配这些操作数。操作数类型为:std :: ifstream&>> size_t”

时间:2018-05-06 06:15:00

标签: c++ serialization operator-overloading iostream

我有一个“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显然不是这样的(或者是这些)时,它们究竟是什么呢?

我的设计是否存在根本性的错误,还是仅仅是一些智能的疯狂?

0 个答案:

没有答案