A melhor maneira de os tipos de C ++ se auto-registrarem em uma lista?

Suponha que eu tenha alguns dados por classe: (AandB.h)

class A
{
public:
   static Persister* getPersister();
}

class B
{
public:
   static Persister* getPersister();
}

... e muito mais aulas. E eu quero fazer algo como:

persistenceSystem::registerPersistableType( A::getPersister() );
persistenceSystem::registerPersistableType( B::getPersister() );
...
persistenceSystem::registerPersistableType( Z::getPersister() );

... para cada aula.

Minha pergunta é: existe uma maneira de automatizar a criação de uma lista de dados por tipo para que eu não precise enumerar cada tipo em uma grande parte (como no exemplo acima)?

Por exemplo, uma maneira de fazer isso é: (AutoRegister.h)

struct AutoRegisterBase
{
   virtual ~AutoRegisterBase() {}
   virtual void registerPersist() = 0;
   static AutoRegisterBase*& getHead()
   {
      static AutoRegisterBase* head= NULL;
      return head;
   }

   AutoRegisterBase* next;
};

template <typename T>
struct AutoRegister : public AutoRegisterBase
{
   AutoRegister() { next = getHead(); getHead() = this; }

   virtual void registerPersist()
   {
       persistenceSystem::registerPersistableType( T::getPersister() );
   }
};

e use da seguinte maneira: (AandB.cxx:)

static AutoRegister<A> auto_a;
static AutoRegister<B> auto_b;

Agora, após o início do meu programa, posso fazer com segurança: (main.cxx)

int main( int, char ** )
{
    AutoRegisterBase* p = getHead();
    while ( p )
    {
        p->registerPersist();
        p = p->next;
    }
    ...
}

para coletar cada pedaço de dados por tipo e registrá-los em uma grande lista em algum lugar para usos posteriores desonestos.

O problema com essa abordagem é que requer que eu adicione um objeto AutoRegister em algum lugar por tipo. (ou seja, não é muito automático e é fácil esquecer). E quanto às classes de modelos? O que eu realmente gostaria é que a instanciação de uma classe de modelo faça com que essa classe seja registrada automaticamente na lista. Se eu pudesse fazer isso, evitaria ter que ter o usuário da classe (em vez do autor) para lembrar de criar um:

static AutoRegister< SomeClass<X1> > auto_X1;
static AutoRegister< SomeClass<X2> > auto_X2;
...
etc....

para cada instanciação de classe de modelo.

Para o FIW, suspeito que não há solução para isso.