«Более одного оператора >> соответствует этим операндам. Типы операндов: std :: ifstream & >> size_t» - PullRequest
0 голосов
/ 06 мая 2018

У меня есть класс интерфейса "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}

, которые работают со всеми видами объектов ostream, поскольку соответствующие операторы перегружены соответствующим iostream-производными, например:

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 & >> size_t.

Каково это (или это) оверлоар для std :: ifstream & >> size_t, когда их явно нет?

Что-то в корне не так с моим дизайном, или это просто какое-то сумасшедшее безумие?

...