Первое, что вам нужно, это передать второй аргумент по ссылке, чтобы объект, измененный внутри оператора, был тем же объектом, в который вы читаете.
Следующее, что вам нужно, это на самом деле считывать данные с вашего внутреннего вектора. Для этого вам нужно пропустить первый [
, а затем читать цифры, пока не найдете ]
.
Первый символ может быть прочитан в символ, затем вы можете использовать copy
, чтобы заполнить вектор, и, наконец, еще один читать в символ, чтобы прочитать ]
:
std::istream& operator>>( std::istream & stream, A & vector ) {
char ch;
stream >> ch;
std::copy( std::istream_iterator<int>(stream), std::istream_iterator<int>(),
std::back_inserter( vector.get_v() ) );
stream.clear();
stream >> ch;
return stream;
}
Теперь это набросок, и вам нужно будет обработать ошибки, в частности, что произойдет, если первый символ не [
или последний символ не ]
...
Примечания:
Обычно не стоит предоставлять полный доступ к вашим внутренним данным, как вы делаете с помощью метода get_v()
. То есть нет смысла делать v_
закрытым, если вы просто собираетесь предоставить полный доступ ... если он должен быть доступен, сделайте его общедоступным, и вы можете избежать написания двух функций доступа.