Раньше я был экспертом по С ++ десять лет назад, но последние 10 лет я программировал на Java. Я только начал проект C ++, который использует небольшой сторонний анализатор XML. Синтаксический анализатор XML принимает поток STL. Мои данные XML поступают из Windows COM IStream. Я решил сделать все правильно и создать адаптер для получения данных IStream и представления их синтаксическому анализатору XML через istream.
Я следовал превосходному учебнику по http://www.mr -edd.co.uk / blog / beginners_guide_streambuf и создал COMStreambuf, который берет данные из базового COM IStream, и использовал его в качестве буфера для пользовательского COMIstream. Все выглядит хорошо, но я получаю ошибку чтения от парсера.
Оказывается, парсер считывает весь файл в память, используя seekg () для istream, чтобы узнать его размер, а затем возвращается к началу с seekg (), чтобы прочитать его за один раз. Неудивительно, что вышеупомянутое руководство решило «сохранить [инструкции по реализации поиска] для другого поста», который, очевидно, никогда не был написан.
Может кто-нибудь сказать мне, что мне нужно сделать, чтобы реализовать seekg () с моим собственным istream / streambuf? Я бы рискнул сделать это сам (мое первое желание было бы переопределить вещи в istream), но из-за моей неопытности в глубине STL и из-за моего менталитета на Java я боюсь сделать что-то неполное и найти хрупкое решение. (Без чтения учебников, например, я бы никогда не догадался, что можно создать собственный istream, например, написав новый streambuf, или что мне нужно было бы вызвать imbue () с локалью по умолчанию и т. Д.)
Спасибо за любую помощь. Я был очень впечатлен этим сайтом - как знанием участников, так и их дружелюбным, честным характером в признании того, кто имеет лучший ответ. :)