CSV biçimli dosyaları ayrıştırmak için bir yineleyici gibi davranan bir sınıf yazdım. Ayrıca doğrudan bir MyObject yapısını doldurmak için belirli csv dosyalarını okumak için başka sınıflar yazdım.Biçimlendirilmiş bir akış üzerinde okumak için yineleyicileri kullanmak iyi bir şey mi?
std::ifstream in(filename);
MyObjectParser parser(in);
MyObjectParser::Iterator it;
for (it = parser.begin(); it != parser.end(); it++)
{
MyObject b = *it;
// do some stuff here ...
}
programı iyi çalışıyor ve onunla mutluyum ama örtük anlamı o (sadece kendim için gerçekleştirilen: o (kod parçasını hata işleme kaldırıldı) gibi Böylece sınıf kullanılabilir? Bir yineleyici o bir koleksiyon üzerinde yineleyicektir. Bu durumda koleksiyon yok ama bir akım var. bu zevk meselesi
std::ifstream in(filename);
MyObjectReader reader(in);
MyObject obj;
while(reader >> obj)
{
// do the same "some stuff" here...
}
mi:
böyle bir açık operatör >> aşırı yüklenerek i akışı kullanıyorum önermek formu ve böylece sahip bir şey tercih edilmelidir? Farklılıkların ne olduğunu açıkça göremiyorum (ikinci formda nesne doldurulduğu ve kopyalanmadığı hariç) ve ilk veya ikinci formun seçiminin sonuçları nelerdir.
Başka neden yerine bir çözüm kullandığımı tam olarak bilmek için başka fikirler almaktan mutluluk duyarım.
Yineleyicilerin * koleksiyonlar üzerinde yinelemesi gerektiğini kim söylüyor *? Anlayışım, yineleyicilerin * bir şey üzerinde yinelemesi, * bir şeyin * herhangi bir veri türü ** olması, örneğin bir kap, bir akış (dosya, ağ verisi, ...) veya hatta bir kısmı (belki kukla) veri. Genel olarak tutun. ;) Iteratör tabanlı arayüzünüzü kişisel olarak seviyorum. – leemes