> Why don't you like visitor to dispatch the
type stored in the variant?
I like it very much, and I use
variant because of the power of the static visiting
mechanism.
The reason I wanted to test if the variant contains its 1st
type is the following: my variant is made of a list
of shared-pointers to various types; there's a routine that initializes
it with one of the types depending on some conditions, then it
applies some visitor on the resulting variant and stores it then in
a container - however, there's no "default" behavior, so
if neither condition was met, the variant remains "uninitialized" -
i.e. it contains 1st type "zero" ptr. I want neither apply the visitor on
"empty" smartpointer nor store it in the container, so I have to know whether
it was "really" created or not. Two simple ways I can think about are
to test the resulting variant or to introduce some flag - of course, both
ways are far from ideal...
struct my_visitor {
typedef bool return_type;
vector<variant_type> &
vec_;
my_visitor (vector<variant_type> &
vec) : vec_(vec) {}
my_visitor (my_visitor & other) :
vec_(other.vec_) {}
bool opeator()(...) {return
false;}
bool operator()(type1 value) {
vec_.push_back(variant_type(value));
return true; }
bool operator()(type2 value)
{ vec_.push_back(variant_type(value));
return true; }
}
vector<variant_type> my_vec
:boost::apply_visitor(my_visitor(my_vec),
my_variant)