Lo veo un poco raro, pero tal vez me estoy perdiendo de algo...
- No veo que sentido tiene que Creada herede de Creadora, yo mas bien
definiria una clase "Creable" con los metodos nombre y crear y que sea
esa que devuelva Creadora
- Si Creadora tiene metodos estaticos, que yo sepa no podrias
intercambiar implementaciones de factory. Yo haria que Creadora sea
un Singleton y que Crear y Registrar sean metodos no estaticos que
devuelvan una clase "Creable".
- Veo medio raro lo de la clase inicializar, me suena raro tener una
clase para eso.
Fijate si no los design patterns, capaz que te puede ayudar.
2008/4/7 personaje <[EMAIL PROTECTED]>:
> 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
>
_______________________________________________
Lista de correo Programacion.
[email protected]
http://listas.fi.uba.ar/mailman/listinfo/programacion