C ++ Открытие файла и ввод данных в объект класса

StackOverflow https://stackoverflow.com/questions/282570

  •  08-07-2019
  •  | 
  •  

Вопрос

Простой вопрос, надеюсь, легкий путь и просто хочу убедиться, что я делаю это правильно / эффективно.

У меня есть объект класса T, который обычно помещается в вектор, созданный в моей функции main (). Это могут быть любые данные, строки, int, float ... и т. Д. Я читаю из файла ... который вводится пользователем и передается в функцию. Вот мое основное чтение в функции:

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 - это просто еще одна функция, которая будет проходить и вставлять данные в мою структуру данных. Я просто хочу убедиться, что это лучший способ передать эти данные, если они вообще будут работать.

Это было полезно?

Решение

Похоже, что он будет работать нормально, и я бы сказал, что это, вероятно, лучший способ сделать это. Но почему вы спрашиваете здесь, а не просто тестируете это сами?

Другие советы

Вы допустили старую ошибку тестирования eof в условии. EOF не устанавливается, пока вы не попытаетесь прочитать за концом файла. Таким образом, этот метод вставит одно лишнее значение в вектор, который вам не нужен.

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)
    }
}

Не используйте .eof () для потока в условии while . Условие будет иметь значение true только после того, как была предпринята попытка чтения после конца файла. лучший способ сделать это

while(myFile >> object)
    insert(v, object, U);

Использование вами U некорректно. Я понятия не имею, для чего это используется. Один раз он используется как тип, но затем в другой раз вы передаете его функции insert в качестве значения.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top