$include_dir="/home/hyper-archives/boost/include"; include("$include_dir/msg-header.inc") ?>
From: Jesse Jones (jesjones_at_[hidden])
Date: 2004-09-17 19:04:42
I've been working on a multimethod library for C++ and, in my opinion, 
it's turned out rather well. It's modeled closely after the 
multimethods in CLOS and Dylan so it's more flexible than the other 
(pure C++) multimethod libraries I have seen. In particular, new 
methods can be added at runtime, polymorphic dispatch doesn't require 
exact matches, and methods can call the next most specific method (sort 
of how a virtual member can call the inherited member).
The nicest feature of multimethods is that they allow classes to be 
extended with virtual members without editing the classes. It's 
completely transparent: the class doesn't need to be coded to allow for 
multimethods and new multimethods can be added without touching any 
existing code. It's a far nicer model than using the Visitor pattern.
The other advantage is that it makes multiple dispatch trivial. This is 
useful for things like intersection tests, drag and drop, event + view 
message handling, etc. Without multiple dispatch these sorts of things 
are rather painful to write and normally require a lot of switching on 
types.
The design is quite simple: there's a generic function object to which 
you dynamically add compatible function objects (using operator<<), an 
operator() that is invoked which will then call the most specialized 
function object (or method) that applies to the actual arguments, and a 
next_method member that can be used within a method to call the next 
most specialized method.
The source can be found at 
<http://sourceforge.net/projects/multimethods/>. Currently it works 
with CodeWarrior 9.2. There are a bunch of test files, but no examples 
or docs as of yet.
So, does this sound like something boost would be interested in?
   -- Jesse