我需要一些指導或指導,瞭解如何實現自定義ostream。我的要求是:自定義ostream
- 以 '< <' 運營商A類幾種數據類型。
- 意圖是將輸出發送到數據庫。每條「線路」應該分別記錄。
- 每個記錄最重要的字段將是文本(或blob),但其他一些字段(如時間等)可以大部分自動推導出來
- 緩衝很重要,因爲我不想去數據庫每一條記錄。
首先,它是否值得從ostream中派生出來?我從ostream獲得什麼?如果我的課程簡單地實現了幾個方法(包括一些自定義數據類型),該怎麼辦?我從ostream獲得哪些功能?
假設我想要的是從ostream派生的類,我需要一些指導來理解ostream和streambuf類之間的關係。我需要執行哪一項?看一些示例,看起來我並不需要從ostream中派生出來,只需給ostream構造函數一個自定義的Streambuf即可。真的嗎?這是規範的方法嗎?
我需要實現自定義streambuf的哪些虛函數?我見過一些樣本(包括本網站:here和here,以及更多),有些覆蓋了sync
方法,其他覆蓋了overflow
方法。我應該重寫哪一個?另外,查看stringbuf和filebuf源文件(Visual Studio或GCC),這兩個緩衝區類都實現了streambuf的許多方法。
如果需要從streambuf派生的自定義類,那麼是否會從stringbuf(或任何其他類)派生出任何好處,而不是直接從streambuf派生?
至於「線條」。至少當我的使用'endl'操縱器的類的用戶成爲一個新行(即在數據庫中記錄)時。也許 - 取決於努力 - 每個'\ n'字符也應該被視爲新記錄。我的自定義ostream和/或streambuf會得到每個人的通知?
您應該創建自己的'streambuf'類,它處理所有繁重的工作,然後創建一個非常簡單的'ostream'類,它繼承'std :: basic_ostream'並使用'streambuf'對象初始化自己。 –
您應該查看[Boost.Iostreams](http://www.boost.org/doc/libs/release/libs/iostreams/doc/index.html) - 它使創建自定義流和緩衝區變得更簡單。 –
感謝您的編輯,@MarkusParker – Uri