2010-04-25 24 views
4

我想編寫一個簡單的ostream,其中包含一個參數ostream,並在將其傳遞給參數流之前以某種方式更改流。這種轉換很簡單,就像改變一個字母或擦除一個字編寫一個ostream過濾器?

ostream繼承的簡單類會是什麼樣子?我應該覆蓋哪些方法?

回答

2

std::ostream不是實現過濾的最佳位置。它沒有適當的虛擬功能讓你這樣做。

你可能想要寫含有包裹std::ostream(或包裹std::streambuf),然後使用該std::streambuf創建std::ostreamstd::streambuf派生的類。

std::streambuf有一個虛擬函數overflow,您可以重寫並使用它來在將字節傳遞給包裝的輸出類之前更改字節。

0

我一直認爲編寫專門的流是幾乎任何問題的錯誤方法。輸出流通常是程序中的一個終點 - 任何數據處理都應該在到達流本身之前完成。對於輸入流也是如此 - 將所需的智能(比如說)解析輸入到流中是把它放在錯誤的地方。當然,我的2美分。

+0

當然。它可能是插入諸如壓縮或加密之類的字節過濾器的明智之處(將這些功能透明地添加到已經序列化爲ostream的代碼中),但它可能不是正確的操作結構化數據的地方。 – 2010-04-25 10:49:45