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 is presented in Annex C++ Bindings (deprecated) . 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.
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(const 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.)