Thanks

Is the m_sd a pointer that points to a double variable ?

How to refer to the values pointed by m_sd ? 


For example, I transfer myClass from process 1 to process 2 : 

In process 1, I declear 

myClass
{
serializable_double m_sd;

serializable_int m_sint;

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

In process 1 , I use 

world.isend(destRank, downStreamTaskTag, myObject);

In process 2, I use 

world.recv(sourceRank, downStreamTaskTag, myObjectRecv);

How to refer to the values pointed by m_sd in myClass ? 

May I use it in this way ? 

*(myObjectRecv.m_sd) ;

If myObjectRecv.m_sd  is an address of a primitive variable, 
the address should be in process 1's memory space. 

How does the process 2 can modify the value of the variable
pointed by a pointer with address in process 1's memory space ?


I can use the similar way to do it for pointer's pointer ?
such as double** ? 

Any help is appreciated ? 


JACK

Aug. 29 2010


To: boost-users@lists.boost.org
From: ramey@rrsd.com
Date: Sun, 29 Aug 2010 09:05:01 -0800
Subject: Re: [Boost-users] boost transfer pointers by serialize

Jack Bryan wrote:
> Dear All,
>
>
> I need to transfer some pointers from one process to another process
> on Open MPI cluster.
>
>
> These pointers are members of a class.
>
>
> They are like:
>
>
> class myClass
> {
> double *;
> int *;
> double**;
> }
>
>
> When I use serialize in boost , I got errors:
>
>
> /boost/serialization/access.hpp:118: error: request for member
> āserializeā in ātā, which is of non-class type ādoubleā

pointers to primitives are not serializable. The problem is that
serializing pointers
requires tracking to detect and manage duplicates. If tracker were
implemented
for doubles it would automatically track ALL the doubles - probably not what
one would want.

But the solution is easy.

define your own double like this

struct serializable_double {
double m_d;
serializable_double(d) : m_d {}
...
}

The above can be done automatically with
BOOST_SERIALIZATION_STRONGTYPEDEF(serializable_double, double)

now you can use

class myClass {
serializable_double m_sd;
...
template<class Archive>
void serialize(Archive &ar, const unsigned int version){
ar & m_sd;
}
};

this should work as one expects.

Robert Ramey






_______________________________________________ Boost-users mailing list Boost-users@lists.boost.org http://lists.boost.org/mailman/listinfo.cgi/boost-users