Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Iterating over the types in a boost::variant

I'm using a boost variant to hold some generated types, right now my code generator creates a header with the types and a variant capable of holding them. At initialization time, I'd like to iterate over the allowable types in the variant, not the types the variant is holding at the moment.

Can I do this with a variant?

like image 794
swarfrat Avatar asked Jan 30 '10 13:01

swarfrat


1 Answers

boost::variant exposes its types via types, which is an MPL list. You can do runtime operations over MPL lists using mpl::for_each:

struct printer {
    template<class T> void operator()(T t) {
        std::cout << typeid(T).name() << std::endl;
    }
};

// ... 
typedef boost::variant<int, char> var;
boost::mpl::for_each<var::types>(printer());
like image 181
Georg Fritzsche Avatar answered Nov 13 '22 16:11

Georg Fritzsche