10.1.4. Class Member Functions for MPI



Up: C++ Next: Semantics Previous: C++ Classes for MPI
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.) 
 



Up: C++ Next: Semantics Previous: C++ Classes for MPI
Return to MPI-2 Standard Index
MPI-2.0 of July 18, 1997
HTML Generated on August 11, 1997
