從常量記憶體建立輸入流:克服資料變更限制
解決從常數記憶體緩衝區讀取資料的問題改變它,有必要建立一個自訂流緩衝區。這可以透過定義一個繼承自標準 std::streambuf 的類別並重寫其相關函數來實現。
具體來說,下面定義的membuf 類別充當流緩衝區:
struct membuf: std::streambuf { membuf(char const* base, size_t size) { char* p(const_cast<char*>(base)); this->setg(p, p, p + size); } };
該類別使用提供的資料緩衝區及其大小設定流緩衝區,本質上定義了要讀取的資料範圍。
要基於此緩衝區創建輸入流,我們定義imemstream 類,該類繼承自membuf 和std::istream:
struct imemstream: virtual membuf, std::istream { imemstream(char const* base, size_t size) : membuf(base, size) , std::istream(static_cast<std::streambuf*>(this)) { } };
該類本質上包裝了自定義流緩衝區並提供輸入流的功能。現在,可以使用imemstream作為常規輸入流:
imemstream in(data, size); in >> value;
透過利用這項技術,人們可以從常量記憶體緩衝區中讀取數據,就好像數據來自流一樣,從而有效地解決了最初的問題同時保持資料的不變性。
以上是如何在不更改資料的情況下從恆定記憶體緩衝區建立流?的詳細內容。更多資訊請關注PHP中文網其他相關文章!