Recientemente recibí una pregunta sobre la implementación de Singleton, pero la clase base abstracta involucrada. Supongamos que tenemos jerarquía de clases como esto:Singleton y clase base abstracta en C++
class IFoo {...}; // it's ABC
class Foo : public IFoo {...};
hemos definido la clase singleton de la siguiente manera:
template <typename T>
class Singleton
{
public:
static T* Instance() {
if (m_instance == NULL) {
m_instance = new T();
}
return m_instance;
}
private:
static T* m_instance;
};
Así que si quiero usar como siguiente: IFoo::Instance()->foo();
¿qué debería hacer?
Si hago esto: class IFoo : public Singleton<IFoo> {...};
no funcionará ya que Singleton llamará al ctor de IFoo pero IFoo es un ABC, por lo que no se puede crear.
Y esto: class Foo : public IFoo, public Singleton<Foo> {...};
no puede funcionar también, porque de esta forma la clase IFoo no tiene la interfaz para el método Instance(), por lo que la llamada IFoo::Instance()
fallará.
¿Alguna idea?
puede usted por favor formatear el código – RvdK
hecho, lo siento por eso –
por favor no utilice este patrón singelton. Es el clásico anti-patrón para la implementación de singelton, ya que es difícil destruir correctamente la instancia. http://stackoverflow.com/questions/86582/singleton-how-should-it-be-used –