#include #include #include #include #include #include namespace boost { namespace mpi { template<> struct is_mpi_datatype : public mpl::true_ {}; } } class Base { public: Base() {} virtual void print() = 0; private: friend class boost::serialization::access; template void serialize(Archive & ar, const unsigned int version) { } }; class Foo : public Base { public: Foo() {} Foo(const std::string& text) : _text(text) {} void print() { std::cout << _text << std::endl; } private: friend class boost::serialization::access; template void serialize(Archive & ar, const unsigned int version) { ar & boost::serialization::base_object(*this); ar & _text; } std::string _text; }; BOOST_CLASS_EXPORT(Foo); int main(int argc, char * argv[]) { boost::mpi::environment env(argc, argv); boost::mpi::communicator world; if (world.rank() == 0) { Base * a = new Foo("Hello"); world.send(1, 0, a); delete a; } else { Base * a; world.recv(0, 0, a); a->print(); delete a; } return 0; }