2010-01-30 39 views
10

Sto usando una variante boost per contenere alcuni tipi generati, in questo momento il mio generatore di codice crea un'intestazione con i tipi e una variante in grado di trattenerli. Al momento dell'inizializzazione, vorrei ripetere i tipi consentiti nella variante, non i tipi che la variante sta tenendo in questo momento.Iterating over the types in a boost :: variant

Posso farlo con una variante?

+0

Iterare sui tipi di fare cosa? –

+0

Ho bisogno di popolare una mappa . – swarfrat

risposta

19

boost::variant espone i suoi tipi tramite types, che è un elenco MPL. È possibile eseguire operazioni di runtime su elenchi MPL utilizzando 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

Sei un amico utile. Grazie =] – taxilian

+0

potrebbe aver bisogno di 'boost :: mpl :: make_identity <>' quando alcuni tipi non sono costruttibili di default. – TemplateRex