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.

Était-ce utile?

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.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top