Скажите и ищите не работает, когда переносите вектор <char>в istream - PullRequest
0 голосов
/ 08 ноября 2018

Как эта ссылка [https://stackoverflow.com/a/8815308/1068715] сказал:

Я использую setg(vec.data(), vec.data(), vec.data() + vec.size()); для инициализации потокового буфера. После этого read() на istream работает должным образом, но tellg() всегда возвращает -1, а seekg() всегда дает сбой.

Кто-нибудь может помочь?

Ответы [ 2 ]

0 голосов
/ 05 марта 2019

Спасибо, что спросили это;Я столкнулся с той же проблемой после ссылки на ту же ссылку.

Я просто хотел бы добавить, что если у вас есть проблема seekg () и вы хотите решить эту проблему, я бы ручался за опцию Boost:

boost::iostreams::basic_array_source<char> isrc(vec.data(), vec.size());
boost::iostreams::stream< typeof(isrc) > istr(isrc);

, потому что вы получаете эту функцию поиска бесплатно прямо из коробки, вместо того, чтобы писать саму реализацию.

0 голосов
/ 08 ноября 2018

seekg и tellg запрашивают streambuf через pubseekoff и pubseekpos для фактического выполнения работы. Реализация по умолчанию этих функций просто не удалась.

Вам необходимо внедрить seekoff и seekpos в ваш потоковый буф.

...