build e accedere a un elenco di tipi in fase di compilazione

Sto cercando di ottenere quanto segue usando la metaprogrammazione del modello c ++. Vorrei creare un elenco di tipi e quindi raccogliere insieme questi tipi e fare ulteriori elaborazioni in fase di compilazione sulla lista. Quindi per esempio:

foo.h:

class Foo { ... }; // INSERT ANY CODE HERE 

bar.h:

 class Bar { ... }; // INSERT ANY CODE HERE 

main.h:

 #include "foo.h" #include "bar.h" struct list_of_types { typedef /* INSERT ANY CODE HERE */ type; }; 

Posso inserire qualsiasi codice negli slot sopra, purché list_of_types :: type risolva in qualche rappresentazione (es. Boost :: mpl :: vector) di una lista contenente i tipi Foo e Bar. Si applicano le seguenti restrizioni:

  1. Il codice in foo.h non dovrebbe conoscere il codice in bar.h e viceversa. Dovrebbe essere ansible cambiare l’ordine delle direttive #include in main.h e non cambiare nessun altro codice.

  2. Il codice in main.h non dovrebbe essere modificato se includo ulteriori intestazioni che aggiungono altri tipi all’elenco.

  3. L’elenco dei tipi deve essere disponibile al momento della compilazione . Sto pianificando di eseguire ulteriori metaprogrammazione coinvolgendo la lista.