Boost logo

Boost Users :

From: Peter Lindman (peter.lindman_at_[hidden])
Date: 2005-08-11 02:29:32


Hello,

I cannot really get the serializations to work for hash_maps. Using
maps, lists and vectors
everything works just fine.

Using the sample code pasted below (using a hash_map) gives the
following compilation-errors:

/usr/include/boost/serialization/access.hpp: In static member function `static
   void boost::serialization::access::serialize(Archive&, T&, unsigned int)
   [with Archive = boost::archive::text_oarchive, T = __gnu_cxx::hash_map<long
   int, long int, __gnu_cxx::hash<long int>, std::equal_to<long int>,
   std::allocator<long int> >]':
/usr/include/boost/serialization/serialization.hpp:78: instantiated
from `void boost::serialization::serialize(Archive&, T&, unsigned int)
[with Archive = boost::archive::text_oarchive, T =
__gnu_cxx::hash_map<long int, long int, __gnu_cxx::hash<long int>,
std::equal_to<long int>, std::allocator<long int> >]'
/usr/include/boost/serialization/serialization.hpp:121: instantiated
from `void boost::serialization::serialize_adl(Archive&, T&, unsigned
int) [with Archive = boost::archive::text_oarchive, T =
__gnu_cxx::hash_map<long int, long int, __gnu_cxx::hash<long int>,
std::equal_to<long int>, std::allocator<long int> >]'
/usr/include/boost/archive/detail/oserializer.hpp:148: instantiated
from `void boost::archive::detail::oserializer<Archive,
T>::save_object_data(boost::archive::detail::basic_oarchive&, const
void*) const [with Archive = boost::archive::text_oarchive, T =
__gnu_cxx::hash_map<long int, long int, __gnu_cxx::hash<long int>,
std::equal_to<long int>, std::allocator<long int> >]'
/usr/include/boost/archive/detail/oserializer.hpp:243: instantiated from here
/usr/include/boost/serialization/access.hpp:106: error: `serialize' undeclared
   (first use this function)
/usr/include/boost/serialization/access.hpp:106: error: (Each undeclared
   identifier is reported only once for each function it appears in.)

Changing the created class to "busmap" (based on std::map) everything
works just fine!
(The ONLY difference between the classes is the container-definition)

System specs:

Linux kernel version 2.4.26
g++ (GCC) 3.3.2 20031218
boost-1.32

Sample code
compiled with: g++ -o test test.cpp -lboost_serialization-gcc-mt
==================================================

#include <fstream>
#include <boost/archive/text_oarchive.hpp>
#include <boost/archive/text_iarchive.hpp>
#include <boost/serialization/hash_map.hpp>
#include <boost/serialization/map.hpp>
#include <ext/hash_map>
#include <map>

class busmap
{
    friend class boost::serialization::access;
    std::map<long,long> bus_serial_map; // Imaginary bus-serial-number
to bus number lookup-table;
    template<class Archive>
    void serialize(Archive & ar, const unsigned int version)
    {
        ar & bus_serial_map;
    }
public:
    busmap(){}
};

class bushashmap
{
    friend class boost::serialization::access;
    __gnu_cxx::hash_map<long,long> bus_serial_map; // Imaginary
bus-serial-number to bus number lookup-table;
    template<class Archive>
    void serialize(Archive & ar, const unsigned int version)
    {
        ar & bus_serial_map;
    }
public:
    bushashmap(){}
};

int main() {
    // create and open a character archive for output
    std::ofstream ofs("filename");
    boost::archive::text_oarchive oa(ofs);

    // create class instance
    const bushashmap myBusMap;
    
    // write class instance to archive
    oa << myBusMap;
    // close archive
    ofs.close();

    // ... some time later restore the class instance to its orginal state
    // create and open an archive for input
    
    std::ifstream ifs("filename", std::ios::binary);
    boost::archive::text_iarchive ia(ifs);
    // read class state from archive
    busmap myNewBusMap;
    ia >> myNewBusMap;
    // close archive
    ifs.close();
    return 0;
}

=======================================

Bug or my fault?? Can anyone help?

Best regards
Peter


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