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)
}
}
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
в качестве значения. Р>