До сих пор, когда бы я ни хотел передать некоторые необработанные данные в функцию (например, функцию, которая загружает изображение из буфера), я делал что-то вроде этого:
void Image::load(const char* buffer, std::size_t size);
Сегодня я взялвзгляните на библиотеки Boost, точнее на заголовок property_tree/xml_parser.hpp
, и я заметил подпись этой функции:
template<typename Ptree>
void read_xml(std::basic_istream<typename Ptree::key_type::value_type>&,
Ptree &, int = 0);
Это на самом деле заставило меня задуматься: это правильный способпередать необработанные данные в C ++, используя потоки?Или я неправильно понимаю, для чего должна использоваться функция?
Если это первое, не могли бы вы указать мне какой-нибудь ресурс, где я могу узнать, как использовать потоки для этого?Я сам почти ничего не нашел (в основном ссылки на API) и не смог найти исходный код Boost для синтаксического анализатора XML.
Редактировать: Некоторые дополнительные детали
Похоже, что я чего-то не понимаю.Учитывая данные буфера, как я могу преобразовать его в поток так, чтобы он был совместим с функцией read_xml
, которую я опубликовал выше?Вот мой конкретный пример использования:
Я использую библиотеку SevenZip C для чтения XML-файла из архива.Библиотека предоставит мне буфер и его размер, и я хочу поместить его в потоковый формат, чтобы он был совместим с read_xml
.Как я могу это сделать?