У меня есть класс интерфейса "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, когда их явно нет?
Что-то в корне не так с моим дизайном, или это просто какое-то сумасшедшее безумие?