Ich habe verwendet:
%Vor%vor kurzem ohne Probleme, obwohl es als potentiell problematisch markiert wurde, wenn Sie es aus einem bestimmten Blickwinkel betrachtet haben (siehe Link unten).
Beiseite: Von dem, was ich verstehe (und ich bin nicht ganz sicher davon), ruft dieser Aufruf schließlich schließlich
basic_ios::init(0)
auf, und das ist ein Wenn der NULL-Zeiger übergeben wird, wird der Stream-Status, wie er von der Funktionrdstate()
zurückgegeben wird, auf den Wertbadbit
gesetzt.Dies wiederum verhindert, dass der Stream weitere Informationen ausgibt, sondern wirft sie einfach weg.
Das folgende Programm zeigt es in Aktion:
%Vor%Die Seite, von der ich es bekommen habe hatte dies auch als eine wahrscheinlich sauberere Lösung ( leicht modifiziert, um die Duplizierung meiner ersten Lösung zu entfernen):
%Vor% Die einfachste Lösung besteht darin, nur auf eine ungeöffnete std::ofstream
auszugeben.
(oder ein anderer Ausgabestream in einem Fehlerzustand). Dies wird dazu führen, dass
stream ist permanent in einem Fehlerzustand. Dies könnte ein Vorteil sein
( <<
Operatoren überspringen die Formatierung), aber wenn Sie einen Code haben
kann die Überprüfung auf Fehler nicht kontrollieren und tut etwas Besonderes, wenn sie dies tun
auftreten, haben Sie wahrscheinlich Probleme.
Ansonsten ist es ziemlich einfach, einen Null-Stream zu implementieren; das einzige
streambuf
Funktion, die Sie wirklich überschreiben müssen, ist overflow
.
Etwas wie das Folgende sollte den Trick tun:
(Der Puffer vermeidet einige unnötige virtuelle Funktionsaufrufe. Bei einigen Plattformen, das macht einen wesentlichen Unterschied.)
Erstellen Sie dann einen Ausgabestream, der es verwendet:
%Vor% (Die Verwendung von Vererbung statt Containment stellt sicher, dass die
streambuf wird vollständig erstellt, bevor es an ostream
übergeben wird.
Dies ist in der Praxis in der Regel nicht erforderlich, der Standard jedoch nicht
scheinen zu autorisieren, eine noch nicht konstruierte streambuf
an die
Konstruktor von ostream
.)
Einige Vorschläge hier Ссылка
Eine gute Antwort von dieser Seite
Verwenden Sie gewöhnliches std :: fstream, öffnen Sie es nur zum Schreiben in die erforderliche Datei "/ dev / null". Es sollte funktionieren.
Wenn Sie wirklich einen eigenen Stream erstellen möchten, leiten Sie ihn einfach ab basic_ostream und definieren Sie einfach Ihren eigenen Operator & lt; & lt; um funktionieren zu können die nur die Stream-Referenz zurückgibt. Sie müssen Dummy schreiben 'schreiben' und 'put' Methode auch (und alle anderen Methoden für die Ausgabe).
Tatsächlich
%Vor%Von Ссылка
Da niemand es erwähnt hat, wenn es um die Unterdrückung von std oder Fehlerausgabe geht, können Sie einfach die entsprechenden Dateideskriptoren schließen (z. B. fclose (stdout)
oder fclose (stderr)
).
Das wird alles verscherbeln, einschließlich Dinge wie printf
oder fprintf (stderr, ...)
Sie werden also weiterhin die üblichen cout
oder cerr
verwenden, aber sie werden in Bit-Buckets umgewandelt.