2016-09-22 1 views
2

Existe-t-il un moyen de vider implicitement les données dans un flux de sortie?Puis-je vider les données implicitement?

#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; 
} 

Je voudrais pouvoir vous connecter sans spécifier le manipulateur << endl chaque fois.

+2

Utilisez '' << flush' à la place? –

+1

Il est assez courant dans la plupart des langages que les flux de sortie soient vidés sur une nouvelle ligne ou un flux proche. C++ n'est pas différent. De nombreuses classes de journalisation implémentent un temporisateur sous les couvertures et forcent un flush lorsque le temporisateur expire. – CAB

+3

@EdHeal: c'est * explicite * non * implicite *. – Jarod42

Répondre

3

Vous pouvez utiliser std::unitbuf.

log << std::unitbuf; 

Ensuite, le rinçage se ferait à chaque insertion.

+0

Donc, pour le flux de journalisation, je dois spécifier 'log << std :: unitbuf;' une fois, et tout sera effacé tout de suite? Et les autres flux ne seront pas affectés? – Pietro

+1

_ "flush serait fait à chaque insertion" _ Cela semble incroyablement inefficace:/ –

+0

@ πάνταῥεῖ - Oui, mais cela peut être bon pour la journalisation, quand vous ne tampon généralement pas. – Pietro