dupa
24-12-2004, 09:40
[Nota: i nomi delle classi le ho scelte per fare un esempio abbastanza comprensibile e semplice rispetto al mio reale problema]
class Draw {
...
vector<Shape*> shape;
...
}
Shape viene estesa da varie classi: Circle, Triangle, Square...
In pratica mi trovo il vector composto da classi varie derivate da Shape.
Immagina un disegno con N figure, che possono essere di vario tipo, in sostanza il disegno contiene un array di forme, (che poi distinguo l'una dall'altra in base all'estensione dalla classe base)
Ognuna delle classi derivate ha quindi attributi differenti dalle altre..
Facendo un esempio stupido...
"Circle" ha 5 attributi di vario tipo
"Squadre" ha 7 attributi di vario tipo.
ecc. ecc.
Ora il problema che mi si pone è salvare su file un'istanza della classe Draw.
Vorrei chiedervi se conoscete qualche "tecnica" per salvare oggetti in modo agevole su file.
Perchè usando una programmazione molto banale potrei fare così:
- In fase di salvataggio:
Salvo prima di tutto un codice identificativo che mi dice che tipo di classe è quella corrente del vettore, quindi scrivo in fila tutti i suoi attributi, poi scrivo il tipo di classse che è il secondo elemento del vettore, quindi i suoi attributi.. ecc. ecc.
- In fase di lettura:
Leggo i primi byte contenenti il codice identificativo, in base a quello scopro che classe è e quindi un metodo di quella classe procederà a leggere gli attributi.
Finito ciò passerò alla lettura del codice identificativo del secondo oggetto salvato nel file.. scopro che classe è.. passo alla lettura dei suoi attributi.. ecc. ecc.
In sostanza un esempio di file potrebbe essere una cosa del tipo:
Circle:4832:34:23:663:33:Square:334:664:23:53:876:443:6767:EOF
In pratica "Circle:" mi dice che il primo elemento salvato è un cerchio, e sapendo che ha 5 attributi, passo alla loro lettura mediante un metodo apposito (tramite polimorfismo) della classe cerchio.
Poi leggo "Square:" so che ha 7 attributi e passo alla loro lettura e creazione in memoria del relativo oggetto.. ecc. ecc.
Ok.. usando il polimorfismo non è nemmeno così complicato... ma...
esiste qualcosa di più rapido per effettuare un salvataggio su file di questo tipo?
(possibilmente usando librerie incluse di "default" nel c++)
Grazie
class Draw {
...
vector<Shape*> shape;
...
}
Shape viene estesa da varie classi: Circle, Triangle, Square...
In pratica mi trovo il vector composto da classi varie derivate da Shape.
Immagina un disegno con N figure, che possono essere di vario tipo, in sostanza il disegno contiene un array di forme, (che poi distinguo l'una dall'altra in base all'estensione dalla classe base)
Ognuna delle classi derivate ha quindi attributi differenti dalle altre..
Facendo un esempio stupido...
"Circle" ha 5 attributi di vario tipo
"Squadre" ha 7 attributi di vario tipo.
ecc. ecc.
Ora il problema che mi si pone è salvare su file un'istanza della classe Draw.
Vorrei chiedervi se conoscete qualche "tecnica" per salvare oggetti in modo agevole su file.
Perchè usando una programmazione molto banale potrei fare così:
- In fase di salvataggio:
Salvo prima di tutto un codice identificativo che mi dice che tipo di classe è quella corrente del vettore, quindi scrivo in fila tutti i suoi attributi, poi scrivo il tipo di classse che è il secondo elemento del vettore, quindi i suoi attributi.. ecc. ecc.
- In fase di lettura:
Leggo i primi byte contenenti il codice identificativo, in base a quello scopro che classe è e quindi un metodo di quella classe procederà a leggere gli attributi.
Finito ciò passerò alla lettura del codice identificativo del secondo oggetto salvato nel file.. scopro che classe è.. passo alla lettura dei suoi attributi.. ecc. ecc.
In sostanza un esempio di file potrebbe essere una cosa del tipo:
Circle:4832:34:23:663:33:Square:334:664:23:53:876:443:6767:EOF
In pratica "Circle:" mi dice che il primo elemento salvato è un cerchio, e sapendo che ha 5 attributi, passo alla loro lettura mediante un metodo apposito (tramite polimorfismo) della classe cerchio.
Poi leggo "Square:" so che ha 7 attributi e passo alla loro lettura e creazione in memoria del relativo oggetto.. ecc. ecc.
Ok.. usando il polimorfismo non è nemmeno così complicato... ma...
esiste qualcosa di più rapido per effettuare un salvataggio su file di questo tipo?
(possibilmente usando librerie incluse di "default" nel c++)
Grazie