Open methods - virtual functions declared outside a class - solve many important problems: they make components more extensible; they help reduce coupling by allowing a better partitioning of responsibilities; and they solve the problem of sewing together layers in multi-tier architectures. Multi-methods - methods dispatched based on the dynamic type of more than one argument - sometimes come handy when dealing with situations like matrix addition or as a replacement for the Visitor pattern. Multi-methods extend to run time the multi-argument selection found in function overloading and template specialization.
A proposal to support open multi-methods was submitted by Bjarne Stroustrup and col. but failed to gain acceptance so far. C++11 makes it possible to support them in a library with a reasonable syntactic burden.Slides