Criando todas as permutações de modelo com MPL
Tenho a seguinte estrutura de classe modelada
struct TraitA{};
struct TraitB{};
template<typename trait>
struct FunctionalityA{};
template<typename trait>
struct FunctionalityB{};
template<typename Func>
struct FuncUserA{};
template<typename Func>
struct FuncUserB{};
template<typename fuser>
struct Host{};
A classe Host agora pode ter os seguintes tipo
typedef Host<FuncUserA<FunctionalityA<TraitA> > > Host1_t;
typedef Host<FuncUserA<FunctionalityA<TraitB> > > Host2_t;
typedef Host<FuncUserA<FunctionalityB<TraitA> > > Host3_t;
typedef Host<FuncUserA<FunctionalityB<TraitB> > > Host4_t;
typedef Host<FuncUserB<FunctionalityA<TraitA> > > Host5_t;
typedef Host<FuncUserB<FunctionalityA<TraitB> > > Host6_t;
typedef Host<FuncUserB<FunctionalityB<TraitA> > > Host7_t;
typedef Host<FuncUserB<FunctionalityB<TraitB> > > Host8_t;
Existe alguma maneira de criar uma lista de tipos com boost :: mpl? No momento, eu nem tenho uma idéia por onde começar. Meu objetivo seria ter uma função como esta:
template<class T>
T* getHost()
{
typedef boost::mpl::find<HostVector, T>::type MplIter;
return new MplIter;
}
Isso é possível com boost :: mpl?