views:

107

answers:

1

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?

+5  A: 

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());
Georg Fritzsche