Boost logo

Boost Users :

From: Robert Ramey (ramey_at_[hidden])
Date: 2006-09-16 02:26:46


Experiment with something like:

class param_choice {
enum

{

PARAM_CHOICE_UINT8,

PARAM_CHOICE_UINT16,

PARAM_CHOICE_UINT32,

PARAM_CHOICE_INT8,

PARAM_CHOICE_BOOL

} m_current_value;

template<class Archive>

save(Archive &ar, unsigned int version);

    std::string svalue;

     switch(m_current_value){

     case PARAM_CHOICE_UINT8:

         svalue = "PARAM_CHOICE_UINT8";

    ...

    }

    ar << BOOST_SERIALIZATION_NVP(svalue);

}

template<class Archive>

load(Archive &ar, unsigned int version){

    std::string svalue;

    ar >> BOOST_SERIALIZATION_NVP(svalue);

    if(svalue == std::string("PARAM_CHOICE_UINT8")

        m_current_value = PARAM_CHOICE_UINT8;

    else

    if(...

    ...

}

};

Robert Ramey
  "Graham Hudspith" <graham.hudspith_at_[hidden]> wrote in message news:000301c6d7fb$8e8a76c0$7701a8c0_at_ubiquisys.local...
  Another "basic" question for the list again, apologies in advance.

   

  I have a class with a data member which is an enumeration, e.g.:

   

  typedef enum param_choice

  {

  PARAM_CHOICE_UINT8,

  PARAM_CHOICE_UINT16,

  PARAM_CHOICE_UINT32,

  PARAM_CHOICE_INT8,

  PARAM_CHOICE_BOOL

  } param_choice_e;

   

  I can quite happily user the Boost Serialization library to save and restore a class with a data member of this type:

   

  class Stuff

  {

  friend std::ostream& operator<<(std::ostream& os, const Stuff& stuff

      

  friend class boost::serialization::access;

   

  template<class Archive>

  void serialize(Archive& ar, const unsigned int file_version)

  {

  ar & BOOST_SERIALIZATION_NVP(choice);

  }

      

  param_choice choice;

   

  public:

  Stuff () {}

      

  Stuff (param_choice theChoice);

  };

   

  This is using XML as the file-format. The data member appears in the file as an integer.

   

  However, what I would LIKE to do is output the value of "choice" as a string (e.g. instead of outputing <choice>2</choice>, the file contains <choice>UINT32</choice>). And do a conversion when I read it all back in again, of course.

   

  Can someone please provide some pointers to where I can find out how to do this? Or an example?

   

  Is the solution going to end up along the lines of:

   

    a.. Split the serialize into separate load and save routines
    b.. In the save, convert the data member into a string and output this to the archive
    c.. In the load, input from the archive into a string and then store this into the data member
   

  Best regards in anticipation,

   

  Graham.

   

------------------------------------------------------------------------------

  _______________________________________________
  Boost-users mailing list
  Boost-users_at_[hidden]
  http://lists.boost.org/mailman/listinfo.cgi/boost-users



Boost-users list run by williamkempf at hotmail.com, kalb at libertysoft.com, bjorn.karlsson at readsoft.com, gregod at cs.rpi.edu, wekempf at cox.net