自定义刷新实现

时间:2012-11-11 09:00:23

标签: c++ iostream

我正在尝试按照this question的逻辑在Rcpp中创建自定义streambuf。有人提供了基本行为,允许我们写出像

这样的东西
Rcout << "some text" ;

我们实施xsputnoverflow以重定向到Rprintf功能。

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

我也想实现刷新,即支持这种语法:

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

我需要实现哪种方法才能使flush操纵器在我的自定义流上运行?

1 个答案:

答案 0 :(得分:6)

sync()功能(如filebuf中所示):

protected:
virtual int sync()

base_streambuf<>::sync()的基本版本什么都不做,必须覆盖它以与底层流进行一些同步。