Creación de instancias de miembro estático de plantilla explícita en una clase derivada
Estoy tratando de implementar una clase de plantilla con un miembro estático. Las clases que se derivan de la clase de plantilla se instanciarán sin la necesidad de escribir código adicional.
Aquí está mi enfoque ingenuo (y no exitoso):
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();
}
C Principal:
int main() {
// an instance of ConcreteA should have been created (no extra code)!!!
return 0;
}
¿Hay alguna manera de forzar la instanciación deConcreteA
simplemente derivandoConcreteA
deSingleton
, sin escribir código de instanciación adicional?
A solución sucia es llamar a un método eninstance_
en elConcreteA
constructor, por ejemplo:
ConcreteA.c
ConcrereA::ConcreteA { instance_.foo(); }
¿Hay mejores soluciones?