Instanciação de membro estático explícita do modelo em uma classe derivada

Estou tentando implementar uma classe de modelo com um membro estático. As classes derivadas da classe de modelo devem ser instanciadas sem a necessidade de escrever código extra.

Aqui está minha abordagem ingênua (e não bem-sucedida):

Singleton.h:

template <class T> class Singleton {
protected:
  Singleton();
  static T instance_;
}

// explicit instantiation of 'instance_' ???, 
// where 'instance_' is an instance of the derived class
template <class T> T Singleton<T>::instance_;

ConcreteA.h:

class ConcreteA : public Singleton<ConcreteA> {
public:
  ConcreteA();
  void foo();
}

main.c:

int main() {
  // an instance of ConcreteA should have been created (no extra code)!!!
  return 0;
}

Existe uma maneira de forçar a instanciação deConcreteA apenas derivandoConcreteA deSingleton, sem escrever código de instanciação extra?

A solução suja é chamar um método eminstance_ noConcreteA construtor, por exemplo:

ConcreteA.c

ConcrereA::ConcreteA { instance_.foo(); }

Existem soluções melhores?

questionAnswers(4)

yourAnswerToTheQuestion