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

Responder a