Boost logo

Boost :

From: David Abrahams (dave_at_[hidden])
Date: 2006-11-04 18:03:24


I'm just looking through the variant library docs in detail and had
the following commments:

* http://www.boost.org/regression-logs/cs-win32_metacomm/doc/html/variant/tutorial.html
  shows static_visitor being used with no arguments and yet
  http://www.boost.org/regression-logs/cs-win32_metacomm/doc/html/boost/static_visitor.html
  doesn't indicate any default for the first parameter. Also, once
  you start using an argument in the tutorial, it comes with no
  explanation, which is confusing.

* It's not obvious why we're deriving anything from static_visitor.
  It seems as though it shouldn't be necessary and that it might not
  be simplifying anything.

* I find the dual nature of apply_visitor confusing. With two arguments it
  is an imperative command: "apply this visitor." With one argument
  it is a wrapper generator or something like that: "make this visitor
  into a function object that operates on variant<T0,...TN> instead
  of on T0, ... TN directly." [Actually, I'm not sure the latter
  description is accurate and it wouldn't hurt to have it spelled out
  in the docs.] I think it would be better to use two names rather
  than overloading one name in these two very different ways.

* I have a very clear mental model for what a non-recursive variant is
  doing, which gives me a clear of its costs and of where I'd use it:
  it's like a supercharged union. From reading your docs it's very
  hard to form the same kind of mental model for a recursive variant.
  It would help to be explicit about what the library generates for
  you in the recursive case.

* The make_recursive_variant example is vague. It should describe
  what the result is equivalent to. I presume it's something like:

       variant<int, ...

  ...uhh, interesting: I don't think you can express that example in
  terms of just variant and recursive_wrapper. However, the text
  implies that make_recursive_variant is just a less-flexible way to
  achieve a subset of the same goals.

* binary visitation:

         "Notably this feature requires that binary visitors are
         incompatible with the visitor objects discussed in the
         tutorial above, as they must operate on two arguments."

  I don't get it. I can make an object whose function call operator
  overload set can operate on both 1 and 2 arguments.

* It seems like visitor_ptr is a very specialized name for something
  very general-purpose. Doesn't bind(fp) (or some other boost
  construct) do the same thing?

-- 
Dave Abrahams
Boost Consulting
www.boost-consulting.com

Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk