Newsgroup: it.comp.lang.c++
Titolo: fwrite di classi

Salve NG! ;)
Ho un piccolo dubbio ...non so se salvare intere classi in un file binario è
possibile o meno...
...scommetto vi starete chiedendo "Non fai prima a provare?!?" ... ;) bhe a
provare ci ho provato e funziona! Molte persone mi hanno detto però che in
alcuni casi può anche non funzionare! :(
...premetto che le variabili della classe sono solo int e char TUTTI
STATICI!
aiuutaatemiiiii ....grazie ;)

possibile o meno...
Si e' possibile ma puo essere anche fonte di errori molto difficili da
scoprire. Per esempio io una volta ho salvato una intera classe
contenente funzioni virtuali al suo interno .
Quando l'ho ricaricata in memoria col piffero che funzionava piu
,infatti la VTABLE puntava da tutt'altra parte ma per capirlo quante
ore buttate............ .

 wrote in message
news:3b5452c7...@news.tiscalinet.it...


 ha scritto nel messaggio
news:9j0vb7$5mvq$1...@stargate1.inet.it...


STATICI!
Per ora. Ma le cose evolvono ... :-) .
Si dice che in tutta la storia dell'informatica non sia *mai*
capitato che un committente cambiasse le specifiche per meno
di tre volte prima della consegna del prodotto. E quell'unico
caso noto in cui sono state cambiate solo due volte e' perche'
il committente e' stato colpito da un fulmine mentre stava per
comunicare la terza variante (citazione libera da "The
Pragmatic Programmer")
Andrea
--
Andrea Griffini, Programmer
http://www.netservers.com/~agriff

 wrote in message
news:3b551e9...@news.interbusiness.it...

Grazie! Ho visto il tuo sito complimenti per quelle simulazioni 3D! ;)

 via rete. 
per fare quello che dici non basterebbe derivarsi un ostream che invece di 
scrivere su disco manda le informazioni in rete?
Anto
-- 
Antonio Cuni, 19 anni, studente
Brainbench C++ Master: 4.6, higher than 98% of all previous test takers.
C Language: 3.32, higher than 79% of all previous test takers.
Guida C/C++ di Programmazione.it: 
http://cpp.programmazione.it

scrivere su disco manda le informazioni in rete?
Non conosco benissimo le librerie di I/O ... ma come fai a cambiare
quali sono i caratteri inviati visto che i metodi "<<" non sono
virtuali ? Supponi di voler fare un encoding per le stringhe 
del tipo...
  "Andrea Griffini" => "Andrea%20Griffini&"
dove tutti i caratteri non alfanumerici diventano %xx dove xx e' il
codice esadecimale del carattere e in coda aggiungi un '&'
terminazione per dire dove finisce la stringa (questo tipo di
escaping e' molto simile a quello usato da HTTP/CGI). Come riesci
a fare in modo che questo succeda in codice del tipo...
   std::ostream& Persona::save(std::ostream& os)
   {
     return os << d_nome
               << d_cognome
               << d_telefono;
   }
Ci potrei riuscire scrivendo una mia classe my_ostream e facendo
output verso questa classe... ma questa classe non potrebbe essere
usata con codice che accetta un normale ostream per fare output.
Quindi nel mio codice di serializzazione non sto usando un ostream
ma un'altra classe (cambia "std::ostream" con "my_ostream"
nell'esempio precedente) e questi metodi non li puoi piu'
comunque chiamare passando std::cout (ma devi scrivere un wrapper).
Io normalmente tendo a preferire la composition rispetto
all'inheritance dove non si usa il polimorfismo... pero' nulla
vieta di scrivere questa classe speciale di serializzazione
derivando da ostream.
Quali sarebbero pero' i vantaggi in una serializzazione ?
Io vedo solo lo svantaggio di quello che mi sembra un inutile
coupling con ostream.


 virtuali ? Supponi di voler fare un encoding per le stringhe
sono d'accordo con quanto affermi, perň mi č venuto un dubbio: 
std::ofstream č derivato da std::ostream; perň come č possibile che vengano 
chiamate le funzioni giuste (quelle che scrivono su file) se gli operator<< 
non sono virtuali?
Inoltre, per fare quello che dici tu, non si potrebbe specializzare 
basic_string<> e basic_ostream<> con tipi diversi da char? Non so di 
preciso come :-( perň credo che siano stati resi template proprio per poter 
gestire casi simili. Oppure ho sbagliato tutto?


 gli operator<< non sono virtuali?
E' cosě, infatti. Gli operator<< non sono virtual e sono implementati
soltanto in ostream. Il comportamento polimorfico č determinato dallo
streambuf soggiacente, il quale ha invece metodi virtuali.
Max

 gestire casi simili. Oppure ho sbagliato tutto?
All'indirizzo
 
http://www.cuj.com/experts/1907/reeves.htm?topic=experts
c'e' un esempio di cosa si puo' fare con delle specializzazioni
di basic_i/ostream per tipi diversi.
	Mauro

 streambuf soggiacente, il quale ha invece metodi virtuali.
beh, allora per fare quello che diceva Andrea Griffini si potrebbe derivare 
un nuovo streambuf, no?


un nuovo streambuf, no?
Con gli streambuf decidi solo *dove* vanno a finire i
caratteri, non quali caratteri vengono generati.
