2012-11-11 9 views
5

Próbuję postępować zgodnie z logiką this question, aby utworzyć niestandardową streambuf w Rcpp. Ktoś przyczynił podstawowe zachowanie, które pozwala nam pisać takie rzeczy jakNiestandardowa implementacja spłukiwania

Rcout << "some text" ; 

gdzie wdrożyliśmy xsputn i overflow przekierować do Rprintf funkcji.

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

chciałbym wdrożyć spłukiwania zbyt, to znaczy obsługuje tej składni:

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

Która metoda muszę wdrożyć tak, że flush manipulator działa na moim niestandardowym strumienia?

Odpowiedz

6

Jest sync() funkcja (jak w filebuf):

protected: 
virtual int sync() 

wersja bazowa base_streambuf<>::sync() nic nie robi, trzeba go zastąpić, aby trochę synchronizację z podstawowej strumienia.

+3

Dzięki. Wdrożono w wersji svn 3935 "Rcpp" –