Я пытаюсь прочитать дефлированный json и испытываю проблемы с преобразованием типов, вот код
boost::iostreams::filtering_streambuf<boost::iostreams::input> in;
std::istringstream iss(std::ios::binary);
iss.rdbuf()->pubsetbuf(buf, len);
iss.imbue( std::locale("ru_RU.CP1251") );
in.push( boost::iostreams::zlib_decompressor() );
in.push( iss );
boost::property_tree::ptree pt;
boost::property_tree::json_parser::read_json(in, pt); // <-- Compile error
Компилятор говорит:
src/ABPacking.cpp:48: error: no matching function for call to 'read_json(boost::iostreams::filtering_streambuf<boost::iostreams::input, char, std::chartraits
, std::allocator >&, boost::property_tree::ptree&)', boost::iostreams::public
Вопрос в том, как передать filtering_streambuf в read_json без лишнего копирования данных?
read_json
ожидает либо имя файла, либо поток с содержимым JSON. Вы пытаетесь передать поток buffer, и он не знает, что с ним делать.
В качестве решения, просто передайте буфер потока в istream
, который потребляет его, и передайте его read_json
:
std::istream input(&in_buf);
read_json(input, pt);