2012-11-11 9 views
5

Ich versuche, die Logik this question zu folgen, um eine benutzerdefinierte streambuf in Rcpp zu erstellen. Jemand trug das grundlegende Verhalten, das wir Dinge wieBenutzerdefinierte Flush-Implementierung

Rcout << "some text" ; 

schreiben kann, wo wir umgesetzt xsputn und overflow-Rprintf Funktion umzuleiten.

std::streamsize Rcpp::Rstreambuf::xsputn(const char *s, std::streamsize num) { 
    Rprintf("%.*s", num, s); 
    return num; 
} 

int Rcpp::Rstreambuf::overflow(int c) { 
    if (c != EOF) { 
     Rprintf("%.1s", &c); 
    } 
    return c; 
} 

Ich möchte auch implementieren Spülung, das heißt unterstützen diese Syntax:

Rcout << "some text" << std::flush ; 

Welche Methode kann ich implementieren müssen, so dass der flush Manipulator auf meiner benutzerdefinierten Stream funktioniert?

Antwort

6

Es ist sync() Funktion (wie in filebuf):

protected: 
virtual int sync() 

Basisversion von base_streambuf<>::sync() tut nichts, man es überschreiben muss eine Synchronisation mit zugrunde liegenden Stream zu machen.

+3

Danke. Implementiert in SVN Revision 3935 von 'Rcpp' –