|
Boost Users : |
From: Ng Pan (panng_wts_at_[hidden])
Date: 2007-05-15 23:44:47
Thank you very much.
I have successfully overloaded the serialization function. Here is the code
as the reference for other ppl doing the similar modification.
base.h
#ifndef BASE_H
#define BASE_H
...
#include<boost\serialization\vector.hpp>
...
class base
{
friend class boost::serialization::access;
template<class Archive>
void serialize(Archive &ar, const unsigned int /* file_version */){
ar & BOOST_SERIALIZATION_NVP(m_nID);
}
.....
}
...
#if defined(__SGI_STL_PORT) || defined(_STLPORT_VERSION)
#define STD _STLP_STD
#else
#define STD std
#endif
namespace boost {
namespace serialization {
//vector<Base *>
template<class Archive, class Allocator>
inline void save(
Archive & ar,
const STD::vector<base *, Allocator> &t,
const unsigned int /* file_version */
){
// record number of elements
unsigned int count = t.size();
ar << BOOST_SERIALIZATION_NVP(count);
for(unsigned int i=0; i< count; i++)
ar<<boost::serialization::make_nvp("loaditem", t.at(i));
}
template<class Archive, class Allocator>
inline void load(
Archive & ar,
STD::vector<base *, Allocator> &t,
const unsigned int /*file_version*/
){
// // retrieve number of elements
unsigned int count;
ar >> BOOST_SERIALIZATION_NVP(count);
for(unsigned int i=0; i<count; i++)
ar >> boost::serialization::make_nvp("loaditem", *t.at(i));
}
}
}
...
#endif
Barr Ng
>From: Matthias Troyer <troyer_at_[hidden]>
>Reply-To: boost-users_at_[hidden]
>To: boost-users_at_[hidden]
>Subject: Re: [Boost-users] DeSerialization to update content of
>objectinsteadof construct new object
>Date: Wed, 16 May 2007 07:22:28 +1000
>
>Another, maybe easier option, could be to overload the serialization
>functions for std::vector<base *> .
>
>Matthias Troyer
>
>On 16 May 2007, at 01:02, Robert Ramey wrote:
>
> > The code for serialization of a vector is found in serialization/
> > vector.hpp.
> >
> > I implemented this code to reconstuct the vector items rather than
> > just reload them. I did this for a number of reasons - which for
> > this discussion are not important.
> >
> > If this doesn't suit your needs, I would suggest you make your own
> > version of serialization.hpp which operates differently. Starting
> > with the current version it wouldn't be at all hard to do.
> >
> > If you want to use both current ("standard") method in some
> > places in addition to your "custom" method, you might consider
> > making some sort of wrapper which tags your special
> > vectors with a type which can be distinguished for special
> > serialization treatment.
> >
> > Robert Ramey
> >
> > Ng Pan wrote:
> >> Hi
> >>
> >> I am using boost serialization to synchronise objects between
> >> different computers (network). The objects would be serializated as a
> >> string instead of a file by using the class stringstream(instead of
> >> fstream). The string would be transferred via TCP/IP layer.
> >>
> >> Let simpify the situation as only two computers (Master and Slave)
> >> ,both of two computers have N objects and I wanna synchronise their
> >> content. I create a vector of pointer ( std::vector<base *> m_vpBase
> >> ) which points to the dirty objects. Both of two computers have this
> >> vector. Let assume the vectors are already pointing to the
> >> corresponding objects. For Tx side, it would serialize the objects as
> >> a string. For Rx side, I want to update the content of the objects
> >> that its vector is pointing to.
> >>
> >> Tx side:
> >> oa << BOOST_SERIALIZATION_NVP(m_vpBase);
> >>
> >> Rx side:
> >> oa >> BOOST_SERIALIZATION_NVP(m_vpBase );
> >>
> >> However, the above code would construct new objects.
> >>
> >> What i want is just update the content of the objects , not construct
> >> new objects.
> >>
> >> I know how to update the content for one object by using pointer (
> >> base * m_pBase).
> >> Tx side:
> >> oa << BOOST_SERIALIZATION_NVP(m_pBase);
> >>
> >> Rx side:
> >> oa >> BOOST_SERIALIZATION_NVP(*m_pBase);
> >>
> >>
> >> But, I don't know how to do for a vector of pointer. If you know,
> >> please give me some hints. Thank you very much.
> >>
> >> Regards
> >> Barr Ng
> >> [I found Boost serialization is useful and easy to use. ]
> >>
> >> _________________________________________________________________
> >> No masks required! Use MSN Messenger to chat with friends and family.
> >> http://go.msnserver.com/HK/25382.asp
> >
> >
> >
> > _______________________________________________
> > 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
_________________________________________________________________
Get 10Mb extra storage for MSN Hotmail. Subscribe Now!
http://join.msn.com/?pgmarket=en-hk
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