
Originariamente inviata da
shodan
La variabile temporanea è solo una perdita di tempo. Se la lettura avviene con successo, i dati sono immediatamente disponibili; se c'è un fallimento non li hai proprio.
Il controllo puoi sempre farlo alla fine, ma se vuoi farlo man mano nulla te lo vieta.
Io pensavo al seguente caso.
codice:
class ProvaFile
{
public:
//metodi vari
void save(std::ofstream& file) const
{
file.write(reinterpret_cast<const char*>(&mDato1), sizeof(mDato1);
file.write(reinterpret_cast<const char*>(&mDato2), sizeof(mDato2);
file.write(reinterpret_cast<const char*>(&mDato3), sizeof(mDato3);
};
void read(std::ifstream& file)
{
file.read(reinterpret_cast<const char*>(&mDato1), sizeof(mDato1);
file.read(reinterpret_cast<const char*>(&mDato2), sizeof(mDato2);
file.read(reinterpret_cast<const char*>(&mDato3), sizeof(mDato3);
};
private:
Tipo1 mDato1;
Tipo2 mDato2;
Tipo3 mDato3;
};
Se la lettura fallisce dopo aver letto il primo dato, quindi mentre cerca di leggere il secondo, mi trovo l'oggetto che e' in uno stato incoerente, ecco perche' dicevo di leggere in variabili temporanee, e poi, verificato che la lettura sia andata a buon fine, copiare i dati letti nei dati membro dell'oggetto.

Originariamente inviata da
shodan
A quel punto però forse converrebbe abilitare le eccezioni per lo stream ed evitare un sacco di if.
Perdona l'ignoranza, ma come si fa? Sta forse scritto nei volumi sugli stream che gia' mi avevi consigliato? Grazie.