> -----Original Message-----

> From: boost-users-bounces@lists.boost.org [mailto:boost-users-

> bounces@lists.boost.org] On Behalf Of Robert Ramey

> Sent: 20 January 2012 17:05

> To: boost-users@lists.boost.org

> Subject: Re: [Boost-users] mpi/serialization: broadcasting derivedclass

> through base pointer

>

> MM wrote:

> >> -----Original Message-----

> ...

> >

> > Hello Matthias, Robert Ramey,

> > I am revisiting the topic of mpi broadcast-receiving a polymorphic

> > object through a base class null pointer:

> >

> > void recv_histodata(boost::mpi::communicator& world)

> > {

> >  historical_data_base* hd = nullptr;

> >  boost::mpi::broadcast(world, hd, master_process);

> > }

> > historical_data_base has 3 derived classes.

> >

> > I get the unregistered class exception from the serialization

> > library, and so I am trying to register the derived type as shown in

> > the serialization doc at /libs/serialization/doc/index.html  :

> > reference

> >

> > ar.template register_type<derived_one>();

> >

> > but where do I put that?

>

> invoke that any time after the archive is created but before the

> "derived_one" is serialized.

> make sure you do it in the same place on saving an loading.  I believe

> the

> following would work.

>

> binary_oarchive oa(...)

>

> oa.template register_type<derived_one>;

>

> ...

>

> binary_iarchive ia(...)

> ia.template register_type<derived_one>;

> ...

>

>

I went with the export guid route. It builds but it seems to go into an infinite loop.

 

This is:

 

 

 

interface_archive.hpp

    template<class T>

    Archive & operator>>(T & t){

>>>        this->This()->load_override(t, 0);

        return * this->This();

    }

 

 

which calls itself again after a couple of in-between calls to other functions. Here is a stack:

 

>      nhcomp.exe!boost::archive::detail::interface_iarchive<boost::mpi::packed_iarchive>::operator>><boost::archive::class_id_type>(boost::archive::class_id_type & t)  Line 60     C++

       nhcomp.exe!boost::archive::detail::common_iarchive<boost::mpi::packed_iarchive>::vload(boost::archive::class_id_type & t)  Line 52     C++

       nhcomp.exe!boost::archive::detail::basic_iarchive_impl::load<boost::archive::class_id_type>(boost::archive::detail::basic_iarchive & ar, boost::archive::class_id_type & t)  Line 198    C++

       nhcomp.exe!boost::archive::detail::basic_iarchive_impl::load_pointer(boost::archive::detail::basic_iarchive & ar, void * & t, const boost::archive::detail::basic_pointer_iserializer * bpis_ptr, const boost::archive::detail::basic_pointer_iserializer * (const boost::serialization::extended_type_info &)* finder)  Line 411    C++

      nhcomp.exe!boost::archive::detail::basic_iarchive::load_pointer(void * & t, const boost::archive::detail::basic_pointer_iserializer * bpis_ptr, const boost::archive::detail::basic_pointer_iserializer * (const boost::serialization::extended_type_info &)* finder)  Line 551    C++

       nhcomp.exe!boost::archive::detail::load_pointer_type<boost::mpi::packed_iarchive>::invoke<nicohich::histodatas::historical_data_base *>(boost::mpi::packed_iarchive & ar, nicohich::histodatas::historical_data_base * & t)  Line 524 + 0x15 bytes  C++

       nhcomp.exe!boost::archive::load<boost::mpi::packed_iarchive,nicohich::histodatas::historical_data_base *>(boost::mpi::packed_iarchive & ar, nicohich::histodatas::historical_data_base * & t)  Line 592 + 0xd bytes   C++

       nhcomp.exe!boost::archive::detail::common_iarchive<boost::mpi::packed_iarchive>::load_override<nicohich::histodatas::historical_data_base *>(nicohich::histodatas::historical_data_base * & t, int __formal)  Line 66 + 0x15 bytes  C++

       nhcomp.exe!boost::mpi::packed_iarchive::load_override<nicohich::histodatas::historical_data_base *>(nicohich::histodatas::historical_data_base * & x, int version, boost::mpl::bool_<0> __formal)  Line 102     C++

       nhcomp.exe!boost::mpi::packed_iarchive::load_override<nicohich::histodatas::historical_data_base *>(nicohich::histodatas::historical_data_base * & x, int version)  Line 119   C++

       nhcomp.exe!boost::archive::detail::interface_iarchive<boost::mpi::packed_iarchive>::operator>><nicohich::histodatas::historical_data_base *>(nicohich::histodatas::historical_data_base * & t)  Line 61     C++

 

rds,