Boost logo

Boost Users :

Subject: Re: [Boost-users] [Serialization]Serialization of nested stl object
From: Kangkook Jee (aixer77_at_[hidden])
Date: 2011-09-20 17:35:03


The following is the code snippet that wouldn't get compiled.

#include <iostream>
#include <fstream>
#include <map>
#include <string>

#include <boost/archive/text_oarchive.hpp>
#include <boost/archive/text_iarchive.hpp>

#include <boost/serialization/map.hpp>
#include <boost/serialization/set.hpp>
#include <boost/serialization/string.hpp>

using namespace std;

class B {
  //private attributes
  map<const string* , set<unsigned> > lines;
  
  //serialization
  friend class boost::serialization::access;

  template<class Archive>
  void serialize (Archive & ar, const unsigned int version) {
    ar & lines;
  }

public:
  B() {}
};

main (int argc, char* argv[]) {

  string fname(argv[1]);

  B b0;

  std::ofstream ofs (fname.c_str());
  boost::archive::text_oarchive oa(ofs);
  oa << b0;
  ofs.close();
  
  std::ifstream ifs(fname.c_str());
  boost::archive::text_iarchive ia(ifs);
  ia >> b0;
  ifs.close();
  
  return 0;
}

On Sep 20, 2011, at 5:02 PM, Júlio Hoffimann wrote:

> Hi Kangkook,
>
> For all stdlib classes Boost.Serialization can deal with, there is a proper header to include. Are you including all necessary ones?
>
> Please make a test case and show us. Also, is really a const string* in your snippet?
>
> Regards,
> Júlio.
>
> 2011/9/20 Kangkook Jee <aixer77_at_[hidden]>
> Hi, all
>
> A member of a target class, where one STL object (map) includes another (set), prevent the code from being built properly
> and the error message urges me to implement *serialize* method for pair<string*, set<unsigned>>.
>
> What is the typical way of implementing serialization using boost for this kind of data structures?
>
> * Code snippet
>
> class B {
> …
> map<const string*, set<unsigned> > lines;
> ..
> template<class Archive>
> void serialize (Archive & ar, const unsigned int version) {
> ar & lines;
> …
>
>
> * Build error message
>
> /opt/local/include/boost/serialization/access.hpp:118: error: ‘class std::map<const std::string*, std::set<unsigned int, std::less<unsigned int>, std::allocator<unsigned int> >, std::less<const std::string*>, std::allocator<std::pair<const std::string* const, std::set<unsigned int, std::less<unsigned int>, std::allocator<unsigned int> > > > >’ has no member named ‘serialize’
>
> Thanks for your help in advance,
>
> /Kangkook
>
> _______________________________________________
> Boost-users mailing list
> Boost-users_at_[hidden]
> http://lists.boost.org/mailman/listinfo.cgi/boost-users
>
> _______________________________________________
> 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