C`e` una cosa che proprio non mi va giu`. Avete mai provato a creare un container di oggetti polimorfici? Beh, io svariate volte, perche` e` una cosa che puo` tornare molto utile, eppure non sono riuscito a trovare MAI una soluzione pulita.
Perche`? Perche` - porca puttana ladra- ci stanno di mezzo i PUNTATORI!
Io in pratica vorrei avere la possibilita` di creare, che so, un 'vector' contenente oggetti di tipo 'derivata1', 'derivata2', 'derivata3' etc.codice:class base { ... }; class derivata1 : public base { ... }; class derivata2 : public base { ... }; class derivata3 : public base { ... }; ...
La cosa sembra banale, e invece mi pare irrisolvibile, perche` si arriverebbe a dover fare cio`:
Che va bene se scritto cosi`, ma non se passato come parametro a qualche funzione/oggetto, perche` bisogna deallocare gli elementi con 'delete', e non posso sapere quando deallocarli.codice:vector< base* > v( 3 ); v[ 0 ] = new derivata1; v[ 1 ] = new derivata2; v[ 2 ] = new derivata3; ...
Ho provato:
1) a derivare 'vector' e riscrivere un costruttore che trasferisca i puntatori e un distruttore che chiami tutti gli opportuni 'delete'; piu` o meno funzionerebbe, ma nel costruttore di copia devo passare l`inizializzatore come 'const' pur dovendolo modificare, quindi, con svariati cast sporchissimi e macchinosi;
2) con gli auto_ptr, ma non si puo` perche` il costruttore di copia e` abbastanza insolito e incompatibile (per "quasi ovvi" motivi che ora non sto a spiegare), e per cui non si puo` creare neanche un container di auto_ptr.
Io mi sono arrangiato con degli enum e degli switch opportuni ma.. se sapete come risolvere meglio questo FOTTUTO problema, per favore aiutatemi!
SONO DI-SPE-RA-TO!
Grazie .. e buon Natale!![]()