Прежде всего, вы захотите возвращать свои потоки в виде ссылок, а не по значению.Кроме того, data()
должен возвращать константную ссылку на вектор, чтобы он не копировался (важно, если это большой вектор).
Что касается перегрузки >>, я бы попробовал что-то вроде:
istream& operator>>(istream& stream, C& in) {
for (char c; /* some end condition */;) {
stream >> c;
in.c.push_back(c);
}
}
Конечно, этот подход потребует объявления operator>>(istream&, C&)
функции друга.Альтернативой является предоставление эквивалента функции append(char)
вашему общедоступному интерфейсу.Кроме того, data()
должен быть помечен как const, так что вся подпись будет const vector<char>& data() const
, давая понять, что это строго метод доступа.