Как кормить Boost.PropertyTree строкой, а не файлом?
Ответы (3)
Вот код, который работает для меня ...
// Create an empty property tree object
ptree xmlTree;
// Read the XML config string into the property tree. Catch any exception
try {
stringstream ss; ss << xmlConfigString;
read_xml(ss, xmlTree);
}
catch (xml_parser_error &e) {
LOGERROR ("Failed to read config xml " << e.what());
}
catch (...) {
LOGERROR ("Failed to read config xml with unknown error");
}
person
jugs
schedule
16.12.2011
Другие ответы неидеальны, потому что использование istringstream
без нужды копирует весь буфер.
Как следует из ответа на этот вопрос, вы можете использовать устаревший istrstream
, но поскольку это генерирует предупреждения и может быть удален в будущем, лучшим решением будет использование boost :: iostreams:
boost::iostreams::stream<boost::iostreams::array_source> stream(moo.c_str(), moo.size());
boost::property_tree::read_json(stream, tree);
Это позволяет избежать ненужного копирования буфера тем же способом, что и istrstream
(что может быть значительной проблемой, если ваш входной буфер большой), и избавляет вас от необходимости писать собственный класс потока.
person
Riot
schedule
08.06.2016