Newsgroup: it.comp.lang.c++
Titolo: Problema strutturazione classi.

salve,
Allora ho un problema con un grupetto di classi.
Dunque io ho tante form che mostro tramite un classe template e che creo 
usando il metodo create
questo metodo vuole un id (ogni id corrisponde ad una differente form) e mi 
ritorna una classe che si riferisce ad una interfaccia che uso in tutto il 
programma con dei metodi : mostra e chiudi
ora il problema e trovare un modo di far comunicare il client (che usa 
questa interfaccia) con la form
il tutto senza far riferimento diretto (dal client) alla form vera e propria
come potrei fare ?

yag wrote:

Cosi', a occhio e croce, mi sembra che ti trovi alle prese con 
un classico problema di double-dispatching (ma, come al solito,
potrei non aver capito un tubo del tuo post).
Potresti fare un esempio piu' pratico di quello che succede
e di qual e' il tuo problema ?
Se ho capito bene tu hai una classe generica 
Form con due metodi pubblici mostra() e chiudi()
(mostra() e chiudi() sono virtuali o soltanto template ?
sono gli unici metodi della classe ?)
poi hai un factory method che ritorna un istanza di form
qualcosa tipo:
 Form* creaForm(int id);
poi hai dei client (uno o piu? tutti derivanti dalla stessa classe
base?)
quindi il client fa qualcosa tipo:
 Form *f = creaForm(x);
 f->mostra();
 f->chiudi()
immagino che il tuo client voglia accedere a delle altre informazioni 
relative al form (in tal caso serve qualche altro metodo, di cui pero' 
tu non hai parlato) 
ma qui sto cercando di inventare, visto che il tuo post  e' come al 
solito molto vago (anche se, devo ammettere, questa volta almeno
un po' piu' comprensibile del solito ;-)
Un caso abbastanza comune e' quello in cui si hanno due gerarchie
di classi, nel tuo caso: da un lato i client e dall'altro i form.
Non vuoi che le classi concrete dell'una e dell'altra gerarchia si 
conoscano, e quindi devi trovare un modo per farli comunicare in 
maniera indiretta. E' questo il tuo problema ?
Se ci dai qualche informazione in piu' (e magari qualche esempio) 
forse possiamo aiutarti...
Saluti,
Fabio

 ha scritto nel messaggio 
news:cvaqbb$b6t$1...@news.hispeed.ch...

In un ipotetico caso di utilizzo ho a che fare con 4 classi
//h -> crea le form
class c_factoryForm{
private :
        c_factoryForm()  {};
        ~c_factoryForm() {};
public:
        c_prodotForm* createForm(enIdForm IDFORM);
}
//cpp solo una parte
c_prodotForm* c_factoryForm::createForm(enIdForm IDFORM)
{
        if (IDFORM == pippo) {
        return new c_prodotGeneric<FormPippo>();
        }
}
/// c_prodotForm.h -> classi che manipola il client
class c_prodotForm{
public:
        c_prodotForm() {};
        ~c_prodotForm() {};
        virtual bool show()=0;
        virtual bool form_delete()=0;
};
//la classe template di cui parlavo prodotGeneric .h -> una classe prodotto 
concreta
template <typename type>
class c_prodotGeneric : public c_prodotForm{
public:
        c_prodotGeneric():
        c_prodotForm() {
          obj = new type();
        }
        ~c_prodotGeneric() {
                form_delete();
        }
        bool show() {
                        obj->ShowModal();
        }
        bool form_delete() {
                        delete obj;
        }
         type *obj;
};
Preciso che uso il termine client non per "parlare" di una particolare 
architettura client server ma solo per indicare l'utilizzatore di una 
detterminata classe.
 

 ha scritto nel messaggio 
news:jh6Sd.569614$b5.26...@news3.tin.it...

Questo è chiaro :-) ?
...