Domanda

Vorrei usare boost ptree nel mio progetto, ma poiché ptree.hpp fa includere circa altri file di intestazione da 1000 questo aumenta i tempi di compilazione drasticamente (ad esempio da 1s a 7s) e come è necessario in oltre 20 diversi file CPP, questo non è Accettabile (le intestazioni pre-condizionate non migliorano molto le cose). Quindi sto pensando di incapsulare il boost ptree nella mia classe, qualcosa come

// myptree.h
#include <boost/property_tree/ptree_fwd.hpp>

class myptree {
   private:
      boost::property_tree::ptree *m_tree;

   public:
      ...
     // adding new (single value) members to the the tree
     void put(const std::string&, double);
     void put(const std::string&, int);
     void put(const std::string&, const std::string&);

     // returning (single value) members of the tree
     double get_double(const std::string&) const;
     int get_int(const std::string&) const;
     std::string get_str(const std::string&) const;

     // working with subtrees
     void push_back(const std::string&, const myptree&);
     myptree get_child(const std::string&) const;

     // import/export
     void read_from_json(const std::string&);
     void write_to_json(const std::string&) const;

};

Tuttavia, non riesco a implementare un iteratore in modo carino. Idealmente mi piacerebbe avere un boost::property_tree::ptree::iterator come variabile membro privato che potrebbe essere iterate m_tree usando le funzioni del mio membro ma come capisco da Come posso dichiarare una classe interiore? Questo generalmente non è possibile. Qualche modo elegante per implementare un iteratore all'interno di questa classe?

Nessuna soluzione corretta

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top