I am trying to achieve the following using c++ template metaprogramming. I wish to build up a list of types and then collect these types together and do further compile-time processing on the list. So for example:
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;
};
I can insert any code into the slots above, so long as list_of_types::type resolves to some representation (e.g. a boost::mpl::vector) of a list containing the types Foo and Bar. The following restrictions apply:
The code in foo.h should not know about the code in bar.h, and vice versa. It should be possible to change the order of #include directives in main.h and not change any other code.
The code in main.h should not have to change if I include further headers that add further types to the list.
The list of types must be available at compile time. I am planning to do further metaprogramming involving the list.
std::tuple
help here? Point 2 is a very sensible requirement – this makes the code open to extension without requiring change to existing code. – Airman