Лучший способ для типов C ++ для самостоятельной регистрации в списке?

Предположим, у меня есть данные для каждого класса: (AandB.h)

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

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

... и еще много-много классов. И я хочу сделать что-то вроде:

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

... для каждого класса.

Мой вопрос: есть ли способ автоматизировать создание списка данных для каждого типа, чтобы мне не приходилось перечислять каждый тип в большом фрагменте (как в приведенном выше примере)?

Например, один из способов сделать это: (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() );
   }
};

и используйте это следующим образом: (AandB.cxx:)

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

Теперь, после запуска моей программы, я могу смело делать: (main.cxx)

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

собрать каждый фрагмент данных для каждого типа и зарегистрировать их все в большом списке где-нибудь для использования в дальнейшем.

Проблема с этим подходом заключается в том, что я должен добавить объект AutoRegister где-то для каждого типа. (то есть он не очень автоматический и его легко забыть сделать). А как насчет шаблонных классов? Что мне действительно нужно, так это чтобы экземпляр класса шаблона каким-то образом заставлял этот класс автоматически регистрироваться в списке. Если бы я мог сделать это, я бы избежал необходимости иметь пользователя класса (а не автора), чтобы не забыть создать:

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

для каждого экземпляра класса шаблона.

Для FIW я подозреваю, что нет решения этой проблемы.