5

この質問のロジックに従って、でカスタムを作成streambufしようとしていますRcpp。誰かが私たちが次のようなことを書くことを可能にする基本的な振る舞いに貢献しました

Rcout << "some text" ;

ここで実装xsputnし、関数overflowにリダイレクトし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マニピュレータがカスタムストリームで機能するようにするには、どのメソッドを実装する必要がありますか?

4

1 に答える 1

6

sync()関数です( filebuf のように

protected:
virtual int sync()

base_streambuf<>::sync()の基本バージョンは何もしません。基になるストリームとの同期を行うために上書きする必要があります。

于 2012-11-11T09:44:06.213 に答える