In C++, können Sie manuell die failbit von einem stream??? Wie?
Ich bin überlastung der input-stream-operator für die Verwendung mit einem Mal Klasse und würde gerne manuell einstellen, das failbit des input-Streams, wenn der Eingang entspricht nicht meiner erwarteten Zeit-format (hh:mm). Kann das getan werden? Wie?
Dank!
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ja, können Sie es mit
ios::setstate
etwa so:Die zweite Ausgabe wird nicht produziert, weil
cout
im Failsafe-Zustand.(Eine Ausnahme scheint sauberer zu mir, aber YMMV)
failbit
ist eine sehr gute Methode, um reporting-streaming-Fehler, da der client-code kann der gleicheif (in >> val) { /* success */ }
idiom, das Sie für die basic-Typen.operator >>(in, custom_type& c)
:if ((in >> member1) && (in >> member2)) { c = custom_type{move(member1), move(member2)}; } else { in.setstate(std::ios::failbit); } return in;
. Wenn geschrieben wie diese, die Sie einbinden konntecustom_type
in einem anderen Objekt und Lesen Sie mit einer ähnlichen Umsetzung (es stapelt sich schön). Der Grund, warum ich es mag, ist da ein 'wenn' ist leichter zu schreiben als ein 'try/catch' - block (für den client-code) - es legt weniger Einschränkungen.