Ben std::istream_iterator<std::string>
'ın begin()
ve end()
olarak tanımlanan buNeden std :: istream_iterator için başlangıç ve bitiş aşırı yüklerimi bulmak için aralık yok?
std::ifstream file(filename, std::ios_base::in);
if(file.good())
{
file.imbue(std::locale(std::locale(), new delimeter_tokens()));
for(auto& entry : std::istream_iterator<std::string>(file))
{
std::cout << entry << std::endl;
}
}
file.close();
gibi kod Mark Nelson da Dr Dobb en here yaklaşık yazmıştır budur
template<class T>
std::istream_iterator<T> begin(std::istream_iterator<T>& stream)
{
return stream;
}
template<class T>
std::istream_iterator<T> end(std::istream_iterator<T>& stream)
{
return std::istream_iterator<T>();
}
izler var. Ne yazık ki, kod hata mesajları
hata C3312 ile benim Visual Studio 2012 tarihinde derlenmeyecektir: tipi için bulunamadı çağrılabilir 'başlamak' fonksiyonunu 'std :: istream_iterator < _Ty>'
ve
hata C3312: tipi için bulunamadı çağrılabilir 'end' işlevi 'std :: istream_iterator < _Ty>'
Soru: Fark etmediğim bir şey var mı, derleyicide hata var (olası değil, fakat durum böyle) veya ... Peki, herhangi bir fikir mi?
Bu sorular, Xeo tarafından önerildiği gibi önemli ölçüde temizlenmiştir. Daha fazla arka plan ve referanslar sağlamak için bu Stackoverflow üzerinde benim other question ile ilgili, ben her zamanki döngülerden satır tabanlı ayrıştırma temizleyici yapmak için nasıl merak ediyordum.
std::ifstream file(filename, std::ios_base::in);
if(file.good())
{
file.imbue(std::locale(std::locale(), new delimeter_tokens()));
for(auto& entry : istream_range<std::string>(file)
{
std::cout << entry << std::endl;
}
}
file.close();
izler ama giderilmesi için çalıştı ufak bir engelle olduğu gibi kodlama ve internetten kontrol etme ve Biraz ben bir çalışma taslağını vardı. Ben derlemek ve
for(auto& entry : istream_range<std::string>(file)
, farklı Yineleyici dikkate alınız gibi değil başarısız kodda olduğu gibi yazmaya daha doğal görünecektir düşünüyorum.
delimeter_tokens,
Nawaz gibi tanımlanmıştır,
here (kod çoğaltılmamış) ve
istream_range, Code Synthesis blog
here'da gösterildiği gibi gösterilmiştir. Başlama ve son uygulamaların, yukarıda bahsedilen Code Synthesis blog yazısında (
) bildirildiği gibi çalışması gerektiğini düşünüyorum. Son kural (serbest duran başlangıç () ve bitiş() işlevlerinin geri dönüşü) mevcut bir kapsayıcıyı invaziv olmayan şekilde uyarlamamıza izin verir. döngü arabirimi için aralık tabanlı.
Bu nedenle, tüm ilgili (ilgili) arka planla ilgili sorum.
sordum gerçek soru yansıtacak şekilde soru başlığı değiştirmek için özgürlük aldı. Geri sarın ya da gerekirse değiştirin. – Xeo
Böyle daha iyi, bence. Benimkine benzer bir çözüm arayışında olanların ve çözülmesi gereken arama sorununa sahip olanların dikkatini çekiyor. Gönderinizi nasıl bir cevap olarak (veya daha başarılı bir kişi yapar) yapabilirim? – Veksi
Bunun için de teşekkürler! : D – Veksi