2016-12-28 29 views
8

yaptığım bu sınıftaki biti başarısız ayarlamak mümkün mü: Ben (değil de) belgelerine bakıyorduelle istream C++ 11

class object { 
    // data... 
public: 
    friend std::istream& operator>>(std::istream& in, object& o) { 
    char c, d; 
    in >> c >> d; 
    if (c == d) { 
     /*set the fail bit some how*/ 
     in.putback(d); 
     in.putback(c); 
    } else 
     o.set_data(c, d); 
    return in; 
    } 
}; 

ama için uygun bir yol bulamadı başarısız biti ayarlayınız. Umrumda olmanın sebebi, bir int ile yapabileceği gibi while(std::cin>>obj)/*do stuff*/; yapabilmeyi isterim. Ama şu anda bunu yaparsam, bir hata olduğunda sonsuz bir döngü olurdu. -_- Hata biti ayarlanıyor mu, yoksa bu problemle farklı bir şekilde çalışmak zorunda mıyım?

+1

'in.setstate (std :: ios_base :: failbit)' – 0x499602D2

cevap

11

Sen basic_ios::setstate işlevini kullanarak bir giriş akışının failbit ayarlayabilirsiniz: Sen setstate kullanabilirsiniz

in.setstate(std::ios_base::failbit); 
6

. Not putback numaralı çağrıdan sonra onu koymalıdır, aksi takdirde akış hata durumunda olduğu için chars başarıyla putback ed olmaz.

if (c==d) { 

    in.putback(d); 
    in.putback(c); 

    /*set the fail bit some how*/ 
    in.setstate(std::ios_base::failbit); 
}