Charles Comstock <cc1 / cec.wustl.edu> wrote in message news:<Pine.LNX.4.44.0405271405190.2169-100000 / earwig.int.cec.wustl.edu>... > On Thu, 27 May 2004, Robert Klemme wrote: > > > > Visitor has its merits but nevertheless I don't like it very much. On one > > hand you retrofit functionality to a class hierarchy but on the other hand > > you need this class hierarchy's collaboration to make it happen if you use > > visitor. I find this a bit too intertwined. I prefer the "hash lookup with > > class" approach. If you do that inside the visitor, you don't need the > > visitee to call any visit_<klass> methods and your visitor code is > > completely independend from the class hierarchy you want to visit. It seems > > to me to be a better separation of concerns. > > It was designed as far as I can tell for use with compilers, that is where it > mostly frequently appears. In that case I think it does a very good job as you > have a number of passes you need to perform across your AST which hopefully is > well structured into a nice class hiearchy. That way you can generate code for > a AddOp, a BinaryComputeIsh, or some such hiearchy like that, catching what you > need where. An AST is something that is well suited to a very deep class > hiearchy and so the Visitor excels at processing it. As for other applications, > I'm not sure if it's as effective there. Another place I've seen it used effectively is scene graph traversal. The OpenSceneGraph project (http://www.openscenegraph.org) has a nice C++ implementation for their purposes.