c++ - titel - title tag länge




Wie füttere Boost.PropertyTree mit einer Zeichenfolge, keine Datei? (2)

Die anderen Antworten sind nicht ideal, da die Verwendung von istringstream unnötigerweise den gesamten Puffer kopiert.

Wie eine Antwort zu dieser Frage nahelegt, könnten Sie den veralteten istrstream , aber da dies Warnungen generiert und in Zukunft entfernt werden kann, ist eine bessere Lösung boost :: iostreams :

boost::iostreams::stream<boost::iostreams::array_source> stream(moo.c_str(), moo.size());
boost::property_tree::read_json(stream, tree);

Dies vermeidet unnötiges Kopieren des Puffers auf die gleiche Weise, istrstream dies bei istrstream der istrstream war (was ein beträchtliches Problem sein kann, wenn Ihr Eingabepuffer groß ist), und erspart Ihnen das Schreiben Ihrer eigenen Stream-Klasse.

Boost hat eine Anleitung zum Laden von XML aus einer Datei . Wie füttere ich es mit einem String, den ich entweder im Code cin oder von einem Benutzer (zB mit cin ) erhalte?


Heres Code, der für mich funktioniert ...

// 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");
}






boost-propertytree