ofstream und tie Problem.
-
Ich benutze boost::test und lenke meine Testausgabe in eine Textdatei. Der Nachteil dabei ist, dass die Ausgaben während des testens (sind keine automatischen) nicht in der Konsole zu sehen sind.
Meine Idee war folgende: Ich öffne einen ofstream und mache ein tie(&std::cout) dran:struct OutputRedirect { OutputRedirect() { test_log.open((std::string("unit_test ")+".log").c_str()); // Tie std::cout to that stream to generate also log output in the console test_log.tie(&std::cout); boost::unit_test::unit_test_log.set_stream( test_log ); } std::ofstream test_log; };Das ist der Ausschnitt. Wenn ich das Ganze laufen lassen, so wird die log datei generiert und befüllt, aber in std::cout kommt nichts an.
Ist das tie so falsch verwendet worden? Oder was übersehe ich da?
-
Da scheint ein Missverständnis vorzuliegen, was tie() so macht. Mit tie() wird i.A. ein Ausgabestream mit einem Eingabestream 'verbunden' und zwar derart, dass der Ausgabestream 'geflushed' wird, bevor der Eingabestream mit dem Lesen anfängt. Das dient dazu, dass bei Konstrukten dieser Art:
cout << "Ihre Eingabe bitte: "; cin >> input_wert;.. der Text 'Ihre Eingabe bitte: ' auch wirklich auf der Konsole erscheint, bevor der Input arbeitet.
Falls Du Ausgaben in mehr als ein Device (Datei, Konsole) gleichzeitig machen willst, so hilft Dir dieser Thread über eine Ausgabe-Weiche weiter.
-
Hallo,
dann muss tie mir irgendwie falsch im Hinterkopf hängen geblieben sein.
Ich schaue mir mal die Weiche an. Bei mir ist es ja andersrum, ich muss an ofstream eine Weiche hängen, weil einige Ausgaben von der getesteten Lib sollen nicht in die log datei wandern.Danke