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