Boost logo

Boost :

From: Yuval Ronen (ronen_yuval_at_[hidden])
Date: 2005-06-23 09:16:22


Hi.

When I want to apply a visitor to a variant, I currently have 2 choices:

    boost::apply_visitor( my_visitor(), my_variant );

and

    my_visitor mv;
    my_variant.apply_visitor( mv );

A tempting 3rd choice of

    my_variant.apply_visitor( my_visitor() );

doesn't work because the variant::apply_visitor member function accept a
const visitor ref, which means it can't be a temporary object.

Moreover, the first option (boost::apply_visitor freestanding function) also
has a problem - it only accepts non-const variants.

I'm not really sure, but I guess that all these limitation are originated
from the desire to pass the visitor by ref, and it's not always possible to
provide both const-ref and non-const-ref overloads. My question is: why by
reference and not by value? I see visitors as a kind of function objects,
and I think that's how it was meant to be seen. Function objects are usually
passed by value, so why should visitors be any different? I couldn't find
anything relevant to this in the docs. Passing by value will allow the much
more appealing syntax I presented as the 3rd option, and it will remove the
limitation from the freestanding function.

Makes sense or complete nonsense?

Thanks,
Yuval


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