До сих пор, когда я хотел передать некоторые исходные данные для функции (как функция, которая загружает изображение из буфера), я хотел бы сделать что-то вроде этого:Передача необработанных данных в C++
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.
Edit:Некоторые дополнительные детали
Кажется, там была некоторая путаница относительно того, что я хочу. Учитывая буфер данных, как я могу преобразовать его в поток, чтобы он был совместим с функцией read_xml
, которую я опубликовал выше? Вот мой конкретный прецедент:
Я использую SevenZip C library для чтения XML-файла из архива. Библиотека предоставит мне буфер и его размер, и я хочу поместить его в формат потока, чтобы он был совместим с read_xml
. Как я могу это сделать?
Нет, я знаю ссылки и указатели. _Streams_ кажутся лучше по сравнению с чистыми буферами данных, потому что вам не нужно передавать их размер вместе с ними (они более безопасны). Я хотел бы знать, как создать такой поток данных, но я не нашел никаких ресурсов в Интернете. –
Вы передаете их размер вдоль них - он просто скрыт внутри объекта alon с реальными данными/содержимым. Вы можете сделать то же самое в C, передавая структуру с указателем, а также длиной. Чтобы создать собственный поток, используйте один из предопределенных классов потоков или создайте свой собственный производный класс, реализующий собственные версии различных методов-членов. – Mario