從常數記憶體建立輸入流
從常數記憶體緩衝區讀取數據,就好像它是流一樣,自訂流緩衝區區可以被創建。此緩衝區將引用常數記憶體位置,而不修改其內容。
實作:
以下程式碼定義了一個流緩衝區membuf 和一個輸入流imemstream,利用membuf 緩衝區:
#include <streambuf> #include <istream> struct membuf: std::streambuf { membuf(char const* base, size_t size) { char* p(const_cast<char*>(base)); this->setg(p, p, p + size); } }; struct imemstream: virtual membuf, std::istream { imemstream(char const* base, size_t size) : membuf(base, size) , std::istream(static_cast<std::streambuf*>(this)) { } };
在在此程式碼中,membuf 使用常數char 指標進行初始化和資料大小。它設定輸入緩衝區(setg)以指向該資料。 imemstream 繼承自 membuf 和 std::istream,有效地將常數記憶體包裝在輸入流中。
用法:
要使用imemstream,請使用以下命令實例化它:常量記憶體指標和大小:
imemstream in(data, size);
然後可以從流中讀取資料:通常:
in >> x >> y >> w;
注意: const_cast 是必要的,因為std::streambuf::setg 需要非常量char 指標。雖然流緩衝區不會修改數據,但該介面需要這種類型以實現“正常”流緩衝區的靈活性。
以上是如何在 C 中從常數記憶體建立輸入流?的詳細內容。更多資訊請關注PHP中文網其他相關文章!