C ++ Apertura di un file e immissione di dati in un oggetto classe
Domanda
Domanda semplice, si spera un modo semplice e voglio solo verificare che lo sto facendo nel modo corretto / efficiente.
Ho un oggetto di classe T, che in genere viene inserito in un vettore creato nella mia funzione main (). Può essere qualsiasi tipo di dati, stringa, int, float ... ecc. Sto leggendo da un file ... che viene immesso dall'utente e passato alla funzione. Ecco la mia funzione di lettura di base:
template <class T, class U>
void get_list(vector<T>& v, const char *inputFile, U)
{
ifstream myFile;
T object;
myFile.open("inputFile")
while(!myFile.eof())
{
myFile >> object;
insert(v, object, U)
}
}
insert è solo un'altra funzione che passerà e inserirà i dati nella mia struttura di dati. Voglio solo assicurarmi che questo sia il modo migliore per trasmettere quei dati se funzioneranno anche.
Soluzione
Sembra che funzionerà bene, e direi che questo è probabilmente il modo migliore per farlo. Ma perché lo chiedi qui invece di provarlo tu stesso?
Altri suggerimenti
Hai fatto il vecchio errore di testare contro eof nella condizione. EOF non è impostato fino a quando non si tenta di leggere oltre la fine del file. Quindi questo metodo inserirà un valore extra nel vettore che non vuoi.
template <class T, class U>
void get_list(vector<T>& v, const char *inputFile, U)
{
ifstream myFile("inputFile"); // Why hard code this?
// When you pass inputFile as a parameter?
T object;
while(myFile >> object) // Get the object here.
// If it fails because of eof() or other
// It will not get inserted.
{
insert(v, object, U)
}
}
Non usare .eof ()
su uno stream in una mentre
-condition. La condizione verrà valutata vera solo dopo è stato effettuato un tentativo di leggere oltre la fine del file. un modo migliore è fare
while(myFile >> object)
insert(v, object, U);
L'utilizzo di U
è errato. Non ho idea di cosa venga utilizzato. Una volta viene usato come tipo, ma un'altra volta lo si passa alla funzione insert
come valore.