Why don't you use STL vector instead of your own Array class. The serialization of STL-vectors is already build in in boost/serialization/vector.hpp. If you want to send an array of complex numbers you could you something like this:
#include <vector>
#include <boost/mpi/environment.hpp>
#include <boost/mpi/communicator.hpp>
#include <boost/serialization/complex.hpp>
#include <boost/serialization/vector.hpp>
using namespace std;
namespace mpi=boost::mpi;
int main (int argc, char *argv[])
{
mpi::environment env(argc, argv);
mpi::communicator world;
int myid=world.rank();
int NN=world.size();
int N=10;
vector< complex<double> >A(N);
if (myid==0)
{
for (int i=0; i!=N; i++)
{
A[i]=complex<double>(i, i);
}
world.send(1, 0, A);
}
if (myid==1)
{
world.recv(0, 0, A);
cout << "###" << endl;
for (int i=0; i!=N; i++)
{
cout << A[i] << "\t" ;
}
cout << endl;
cout << "###" << endl;
}
}
If not, you have to make the datatype which is content of your vector is serializable. If the serialization of that datatype is not part of the boost serialization library you have to write your own serialization. For example for your complex struct from above somethink like this should do the trick (not tested):
namespace boost
{
namespace serialization
{
template<class Archive>
void serialize(Archive & ar, complex & c, const unsigned int version)
{
ar & c.real_imag;
}
}
}
But as I said, the STL complex type is already build in in boost serialization.