2009-06-02 46 views
1

有沒有人有一個如何重新定義在clog中構建的C++的例子,而是有一個新的關聯rdbuf(),它被處理成原來的clog.rdbuf()和一個ofstream對象的rdbuf()磁盤上的日誌文件。如何重新定義clog的rdbuf()作爲發球的原始rdbuf()和日誌文件的發球?

其目的是讓代碼始終使用std :: clog,但將其轉到默認的阻塞目標以及磁盤上的日誌文件。

謝謝。

- 威廉

+0

請不要問相同的問題兩次:http://stackoverflow.com/questions/937805/how-to-redefine-clog-to-tee-to-original-clog-and-a-log-file – lothar 2009-06-02 23:32:18

回答

2

您必須編寫自定義流緩衝派生類。讓它將數據吐出到你的ofstream的rdbuf和你原來的clog rdbuf。

編寫自定義流緩衝的一般示例:

http://www.dreamincode.net/code/snippet2499.htm

積攢新的流緩存可以做如下:

// grab buffer for clog 
std::streambuf* oldClogBuf = std::clog.rdbuf(); 

// create custom buffer which feeds both clog and an ofstream 
CustomBuffer* customBuf = new CustomBuffer(oldClogBuf); 

// stash custom buffer 
std::clog.rdbuf(customBuf); 

...do stuff... 

// restore original clog buffer 
std::clog.rdbuf(oldClogBuf); 

您可以通過使用使整個事情更穩健RAII成語來管理緩衝區切換。

相關問題