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?