2011-03-13 12 views

cevap

11

İşte kodlar ... istringstream gereksiz kopyalarını tüm tampon kullanarak çünkü

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

diğer cevaplar olmayan idealdir.

this question üzerinde bir cevap size kaldırılmış istrstream kullanabilirsiniz, anlaşılacağı gibi, ama bu uyarılar üretir ve gelecekte kaldırılabilir olabileceğinden daha iyi bir çözüm boost::iostreams kullanmaktır: Bu gereksiz yere kopyalama kaçınır

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

Aynı şekilde arabellek istrstream (giriş arabelleğinizin büyük olması durumunda önemli bir sorun olabilir) ve kendi akış sınıfınızı yazmak zorunda kalmanızı sağlar.

İlgili konular