Boost logo

Boost Users :

From: John Femiani (JOHN.FEMIANI_at_[hidden])
Date: 2008-05-07 05:56:57


Oop! sorry, I did not intend to send that yet -- I was toying with the
problem discussed in this thread but my finger slipped.. :(

________________________________

        From: John Femiani
        Sent: Wednesday, May 07, 2008 2:53 AM
        To: 'boost-users_at_[hidden]'
        Subject: RE: [Boost-users] [variant] how to get 1st bounded type
        
        

> 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)



Boost-users list run by williamkempf at hotmail.com, kalb at libertysoft.com, bjorn.karlsson at readsoft.com, gregod at cs.rpi.edu, wekempf at cox.net