$include_dir="/home/hyper-archives/boost/include"; include("$include_dir/msg-header.inc") ?>
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