2008-11-11 5 views
0

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

У меня есть объект класса 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) 
    } 
} 

вставка просто еще одна функции, которая будет проходить через и вставить данные в мою структуру данных. Я просто хочу убедиться, что это лучший способ передать эти данные, если он будет работать.

ответ

1

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

+0

Я не ищу, чтобы кто-то написал код, я просто пытаюсь найти хороший метод ввода данных из файла и вставки его в класс объектов, как я этого никогда не делал. Нет, я не сижу в классе, записывая этот материал для оценки. Я просто не хочу писать все только до – Doug 2008-11-12 00:04:26

1

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

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

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

4

Вы сделали старую ошибку тестирования против 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) 
    } 
}