2010-01-30 6 views
10

Ich verwende eine Boost-Variante, um einige generierte Typen zu halten, jetzt erstellt mein Code-Generator einen Header mit den Typen und einer Variante, die sie halten kann. Zur Initialisierungszeit möchte ich über die zulässigen Typen in der Variante iterieren, nicht die Typen, die die Variante im Moment hält.Iterieren über die Typen in einem Boost :: Variante

Kann ich das mit einer Variante machen?

+0

Iterieren über die Typen, um was zu tun? –

+0

Ich muss eine Karte auffüllen. – swarfrat

Antwort

19

boost::variant zeigt seine Typen über types, die eine MPL-Liste ist. Sie können Laufzeitoperationen über MPL-Listen durchführen, indem Sie 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

Sie sind ein nützlicher Gefährte. Thanks =] – taxilian

+0

könnte 'boost :: mpl :: make_identity <>' benötigen, wenn einige der Typen nicht standardkonstruierbar sind. – TemplateRex