2016-09-22 8 views
2

Есть ли способ неявно вывести данные в выходной поток?Могу ли я скрывать данные неявно?

#include <iostream> 
#include <fstream> 
using namespace std; 

#define log logstream 

int main() 
{ 
    ofstream logstream("test.log"); 

    log << "Test1" << 123 << endl;  // explicitly flushed 
    log << "Test2" << 123;    // ? 

    // Test2 not written, yet... 

    cout << "Check log file..." << endl; 
    int tmp; 
    cin >> tmp; 
} 

Я хотел бы иметь возможность войти без указания << endl манипулятором каждый раз.

+2

Используйте '<< flush' вместо этого? –

+1

Это довольно стандартная версия большинства языков, на которые выводятся потоки, на «новой линии» или потоке. C++ не отличается. Многие классы каротажа реализуют таймер под обложками и принудительно стирают, когда истекает время таймера. – CAB

+3

@EdHeal: это * явный * не * неявный *. – Jarod42

ответ

3

Вы можете использовать std::unitbuf.

log << std::unitbuf; 

И затем промывка будет выполняться при каждой установке.

+0

Итак, для потока журнала я должен указать 'log << std :: unitbuf;' один раз, и тогда все будет немедленно очищено? И другие потоки не будут затронуты? – Pietro

+1

_ «flush будет выполняться при каждой вставке» _ Это звучит невероятно неэффективно:/ –

+0

@ πάνταῥεῖ - Да, но это может быть полезно для ведения журнала, когда вы обычно не буферизируете. – Pietro

 Смежные вопросы

  • Нет связанных вопросов^_^