Byłem ekspertem C++ dekadę temu, ale przez ostatnie 10 lat programowałem Javę. Właśnie rozpocząłem projekt C++, który używa małego parsera XML innej firmy. Analizator składni XML akceptuje istnienie STL. Moje dane XML pochodzą z systemu IStream systemu Windows. Pomyślałem, że zrobię Right Thing i utworzę adapter, aby pobrać dane IStream i zaprezentować je parserowi XML za pośrednictwem istream.Jak zaimplementować seekg() dla niestandardowego istream/streambuf?
Podążyłem za doskonałym tutorialem pod numerem http://www.mr-edd.co.uk/blog/beginners_guide_streambuf i utworzyłem COMStreambuf, który pobiera dane z leżącego poniżej COM IStream, i użył go jako bufora dla niestandardowego COMIstream. Wszystko wygląda dobrze, ale dostaję błąd odczytu z analizatora składni.
Wyłącza analizator składni odczytuje cały plik do pamięci za pomocą funkcji seekg() na stronie głównej, aby ustalić jego rozmiar, a następnie powraca do początku za pomocą funkcji seekg(), aby przeczytać ją za jednym razem. Nic więc dziwnego, że wspomniany samouczek zdecydował się "zapisać [instrukcje dotyczące realizacji wyszukiwania] dla innego postu", który najwyraźniej nigdy nie został napisany.
Czy ktoś może mi powiedzieć, co muszę zrobić, aby zaimplementować seekg() z moim niestandardowym istream/streambuf? Zaryzykowałbym robienie tego samemu (moja pierwsza skłonność byłaby przesłonięciem rzeczy w istream), ale z moim brakiem doświadczenia to głęboko w STL i z moją mentalnością java, obawiam się, że zrobiłbym coś niekompletnego i ma kruche rozwiązanie. (Bez czytania samouczków, na przykład, nigdy bym nie zgadł, że jeden tworzy niestandardowy istream pisząc na przykład nowy streambuf lub że musiałbym nazywać imbue() z domyślnym locale, itp.)
Dzięki za pomoc. Byłem pod wielkim wrażeniem tej strony - zarówno ze znajomością uczestników, jak i ich przyjazną, uczciwą naturą w przyznawaniu, kto ma najlepszą odpowiedź. :)
Co to jest 'gback()'? Czy chodziło Ci o 'eback()'? – 0x499602D2
@ 0x499602D2: Tak. Dzięki za spostrzeżenie. –