Buenas amigos programadores,
Tengo un problemita bastante complejo que no puedo resolver.
Tengo una clase que tiene dos metodos estáticos Crear y Registrar,
ambos son usados a modo de factoria para crear y registrar clases
derivadas. En código sería algo así:
// CREADORA.H
clase Creadora
{
public:
Creadora(){}
virtual ~Creadora(){}
static Creadora *Crear(std::string nombre);
static bool Registrar(Creadora *pCreador);
virtual std::string Nombre()const=0;
virtual Creadora *Crear()const=0;
};
// CREADA.H
#include "Creadora.h"
clase Creada : public Creadora
{
public:
Creada(){}
virtual ~Creada(){}
virtual std::string Nombre()const{return "Creada";}
virtual Creada *Crear()const{return new Creada;}
};
// CREADA.CPP
#include "Creada.h"
namespace {
class inicializar {
public:
inicializar(){Creadora::Registrar(new Creada;);}
~inicializar(){}
};
inicializar ini;
}
Con esto logro que la clase Creada sea registrada en Creadora antes de
llegar al main (evitando ejecutar código).
El problema que tengo es que ini no es creado y por lo tanto, no se
ejecuta el código que registra a Creada en Creadora.
Lo raro es que si en otro .cpp, pongo un "new Creada" (incluso si está
en una porción de código que nunca se ejecuta), entonces todo funciona
como quiero, ini es creado, se ejecuta su ctor, se registra Creada en
Creadora, y cuando quiero crear una clase usando
Creadora::Crear("Creada") me retorna la nueva instancia...
Obviamente, mi código es más complejo que esto. En el caso este (tengo
los .cpps) funciona siempre bien, es decir, sin necesidad de agregar
un new Creada. Entonces, la pregunta es : ¿Alguien puede ver que esto
es un *enchastre* monstruoso y sugerir una alternativa o si no es tan
enchastre, decirme dónde estoy pifiando?
Gracias por adelantado
Saludos
_______________________________________________
Lista de correo Programacion.
[email protected]
http://listas.fi.uba.ar/mailman/listinfo/programacion