你为什么不使用 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;
}
}
如果不是,您必须使作为向量内容的数据类型是可序列化的。如果该数据类型的序列化不是 boost 序列化库的一部分,则您必须编写自己的序列化。例如,对于您上面的复杂结构,这样的想法应该可以解决问题(未经测试):
namespace boost
{
namespace serialization
{
template<class Archive>
void serialize(Archive & ar, complex & c, const unsigned int version)
{
ar & c.real_imag;
}
}
}
但正如我所说,STL 复杂类型已经内置在 boost 序列化中。