contador de tempo de compilação para classes de modelo

Imagine que você tem muitas classes com vários parâmetros de modelo diferentes. Toda classe tem um métodostatic void f(). Você deseja coletar todos esses ponteiros de função em uma lista L.

Uma solução em tempo de execução seria fácil:

typedef void (*p)();
std::vector<p> L;
int reg (p x) { static int i = 0; L.push_back(x); return i++; } // also returns an unique id

template <typename T> struct regt { static int id; };
template <typename T> int regt<T>::id = reg (T::f);

template < typename ... T > struct class1 : regt< class1<T...> > { static void f(); };
template < typename ... T > struct class2 : regt< class2<T...> > { static void f(); };
// etc.

O compilador sabe tudof()s de todas as classes instanciadas em tempo de compilação. Portanto, teoricamente, deve ser possível gerar uma lista desse tipo (umconst std::array<p, S> L com algumS) como uma lista constante em tempo de compilação. Mas como? (As soluções C ++ 0x também são bem-vindas).

Por que eu preciso disso?

Em uma arquitetura com apenas 256 kB (para código e dados), preciso gerar objetos para os IDs de classe recebidos. As estruturas de serialização existentes ou a solução de tempo de execução acima são desnecessariamente grandes. Sem modelos, seria fácil uma solução em tempo de compilação, mas quero manter todas as vantagens que os modelos oferecem.

questionAnswers(2)

yourAnswerToTheQuestion