Локальное переопределение оператора извлечения строки

У меня есть набор служебных функций, которые читают строки из потока, а не читают слово за словом. Они работают с stringс, поэтому я хотел бы локально изменить string оператор извлечения только в рамках этих функций. Это возможно?


Что я делаю сейчас, чтобы создать struct это string и написание оператора извлечения только для этой структуры.

struct line{
string str;
};

istream& operator>>(istream& lhs, line& rhs){
return getline(lhs, rhs.str);
}

А потом извлекать istream как это:

vector<line> foo{ istream_iterator<line>(istringstream("Lorem Ipsum\nLorem Ipsum")), istream_iterator<line>() };

Это прекрасно работает, но мне не нравится struct line обертка. Я спрашиваю, могу ли я перегрузить локально istream& operator>>(istream& lhs, string& rhs) чтобы сделать это вместо этого?

1

Решение

То, что вы просите, не возможно. Там уже существует istream& >>(istream&, string& )так что вы не можете просто перезаписать это. Предоставление другого типа уже способ сделать это.

Одна вещь, которую вы могли бы сделать, это обеспечить преобразование из line в std::string так что ваш контейнер может быть просто std::vector<std::string> вместо std::vector<line>

struct line{
string str;
operator string() const { return str; }
};

istringstream iss("Lorem Ipsum\nLorem Ipsum");
vector<string> foo{istream_iterator<line>(iss),
istream_iterator<line>() };

Таким образом, line type не должен существовать вне процесса извлечения и попадать в остальную часть вашей кодовой базы.

2

Другие решения


По вопросам рекламы [email protected]