C ++ فتح الملفات وإدخال البيانات إلى كائن الفئة

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

  •  08-07-2019
  •  | 
  •  

سؤال

والسؤال بسيط، ونأمل وسيلة سهلة ونريد فقط أن تحقق أنا أفعل ذلك الصحيحة الطريق / فعالة.

ولدي كائن فئة T، والتي عادة ما وضع في ناقلات الذي تم إنشاؤه في مهمتي الرئيسية (). ويمكن أن يكون أي نوع من البيانات، سلسلة، كثافة، تطفو .. الخ أنا أقرأ من ملف ... الذي المدخلة من المستخدم ومرت على وظيفة. وإنني هنا قراءة الأساسية في وظيفة:

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

وإدراج مجرد وظيفة أخرى من شأنها أن تذهب من خلال وادخال البيانات في بنية البيانات الخاصة بي. أريد فقط للتأكد من هذا هو أفضل وسيلة لتمرير تلك البيانات على ما اذا كان سيكون حتى العمل.

هل كانت مفيدة؟

المحلول

ويبدو أنها سوف تعمل بشكل جيد، وأود أن أقول هذا هو على الارجح أفضل طريقة للقيام بذلك. ولكن لماذا تسأل هنا بدلا من مجرد اختبار ذلك بنفسك؟

نصائح أخرى

وكنت قد ارتكبت خطأ القديم اختبار ضد الفولكلوري في هذه الحالة. لم يتم تعيين 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