Почему бы вам не использовать вектор STL вместо собственного класса Array. Сериализация STL-векторов уже встроена в boost / serialization / vector.hpp. Если вы хотите отправить массив комплексных чисел, вы могли бы что-то вроде этого:
#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;
}
}
Если нет, вы должны сделать сериализуемый тип данных, содержащий содержимое вашего вектора. Если сериализация этого типа данных не является частью библиотеки расширенной сериализации, вы должны написать свою собственную сериализацию. Например, для вашей сложной структуры сверху что-то вроде этого должно сработать (не проверено):
namespace boost
{
namespace serialization
{
template<class Archive>
void serialize(Archive & ar, complex & c, const unsigned int version)
{
ar & c.real_imag;
}
}
}
Но, как я уже сказал, комплексный тип STL уже встроен в ускоренную сериализацию.