2012-11-11 32 views
5

Tôi đang cố gắng tuân theo logic của this question để tạo một tùy chỉnh streambuf trong Rcpp. Có người đóng góp các hành vi cơ bản cho phép chúng tôi viết những thứ nhưTriển khai thực hiện tùy chỉnh

Rcout << "some text" ; 

nơi chúng tôi thực hiện xsputnoverflow để chuyển hướng đến Rprintf chức năng.

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

Tôi muốn thực hiện xả nước quá, ví dụ: hỗ trợ cú pháp sau:

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

Những phương pháp làm tôi cần phải thực hiện để các flush thao túng hoạt động trên dòng tùy chỉnh của tôi?

Trả lời

6

Đó là sync() chức năng (như trong filebuf):

protected: 
virtual int sync() 

phiên bản cơ sở của base_streambuf<>::sync() không có gì, người ta phải ghi đè lên nó để làm cho một số đồng bộ hóa với dòng cơ bản.

+3

Cảm ơn. Thực hiện trong sửa đổi svn 3935 của 'Rcpp' –

Các vấn đề liên quan