C ++ Ouverture d'un fichier et saisie de données dans un objet de classe
Question
Question simple, j'espère un moyen facile et je veux juste vérifier que je le fais de manière correcte / efficace.
J'ai un objet de classe T, qui est généralement placé dans un vecteur créé dans ma fonction main (). Cela peut être n'importe quel type de données, chaîne, int, float, etc. Je lis dans un fichier ... qui est entré par l'utilisateur et transmis à la fonction. Voici ma fonction de lecture de 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)
}
}
insérer est juste une autre fonction qui va parcourir et insérer les données dans ma structure de données. Je veux juste m'assurer que c'est le meilleur moyen de transmettre ces données si elles fonctionnent même.
La solution
Il semble que cela fonctionnera bien, et je dirais que c'est probablement la meilleure façon de le faire. Mais pourquoi demandez-vous ici au lieu de simplement le tester vous-même?
Autres conseils
Vous avez fait la vieille erreur de tester contre eof dans la condition. EOF n'est défini que lorsque vous essayez de lire après la fin du fichier. Cette méthode va donc insérer une valeur supplémentaire dans le vecteur que vous ne voulez pas.
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)
}
}
N'utilisez pas .eof ()
sur un flux de type avec
-condition. La condition sera évaluée à true uniquement après une tentative de lecture au-delà de la fin du fichier. une meilleure façon est de faire
while(myFile >> object)
insert(v, object, U);
Votre utilisation de U
est erronée. Je n'ai aucune idée de ce à quoi il sert. Une fois, il est utilisé comme type, mais une autre fois, vous le transmettez à la fonction insert
en tant que valeur.