2010-01-30 17 views
10

Estoy usando una variante de refuerzo para mantener algunos tipos generados, en este momento mi generador de códigos crea un encabezado con los tipos y una variante capaz de contenerlos. En el momento de la inicialización, me gustaría iterar sobre los tipos permitidos en la variante, no sobre los tipos que la variante contiene en este momento.Iteración de los tipos en un impulso :: variante

¿Puedo hacer esto con una variante?

+0

Iterating over the types to doing what? –

+0

Necesito rellenar un mapa . – swarfrat

Respuesta

19

boost::variant expone sus tipos a través de types, que es una lista MPL. Puede hacer operaciones en tiempo de ejecución sobre listas MPL usando 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()); 
+0

Eres un tipo útil. Gracias =] – taxilian

+0

puede necesitar 'boost :: mpl :: make_identity <>' cuando algunos de los tipos no son predecibles. – TemplateRex

Cuestiones relacionadas