Besides the member functions which constitute the C++ language bindings for MPI, the C++ language interface has additional functions (as required by the C++ language). In particular, the C++ language interface must provide a constructor and destructor, an assignment operator, and comparison operators.
The complete set of C++ language bindings for MPI-1 is presented in Annex MPI-1 C++ Language Binding . The bindings take advantage of some important C++ features, such as references and const. Declarations (which apply to all MPI member classes) for construction, destruction, copying, assignment, comparison, and mixed-language operability are also provided. To maintain consistency with what has gone before, the binding definitions are given in the same order as given for the C bindings in [6].
Except where indicated, all non-static member functions (except for constructors and the assignment operator) of MPI member classes are virtual functions.
[] Rationale.
Providing virtual member functions is an important part of design
for inheritance. Virtual functions can be bound at run-time, which
allows users of libraries to re-define the behavior of objects
already contained in a library. There is a small performance
penalty that must be paid (the virtual function must be looked up
before it can be called). However, users concerned about this
performance penalty can force compile-time function binding.
( End of rationale.)
Example
Example showing a derived MPI class.
class foo_comm : public MPI::Intracomm { public: void Send(void* buf, int count, const MPI::Datatype& type, int dest, int tag) const { // Class library functionality MPI::Intracomm::Send(buf, count, type, dest, tag); // More class library functionality } };
[] Advice
to implementors.
Implementors must be careful to avoid unintended side effects from class
libraries that use inheritance, especially in layered
implementations. For example, if MPI_BCAST is
implemented by repeated calls to MPI_SEND or
MPI_RECV, the behavior of MPI_BCAST cannot be
changed by derived communicator classes that might redefine
MPI_SEND or MPI_RECV. The implementation of
MPI_BCAST must explicitly use the MPI_SEND (or
MPI_RECV) of the base MPI::Comm class.
( End of advice to implementors.)