我的文件中有一个编码的TAR文件,基本上可以将其加载到文件映射中。该映射隐藏在文件系统的抽象层后面,该文件系统除其他功能外具有以下功能:
virtual void setFileContents ( string const& path , shared_ptr<istream> const& dataSource ) =0 ;
此功能可能会保留到流中,直到稍后再将其读入其内部表示中。
我想做的是第一次尝试从该流中读取数据,以导致发生一系列事情:
再次打开tar文件
搜索到数据的起始位置
读取数据
解码数据
将其存储到缓冲区中,以便istream
函数可以正常工作(也许是字符串流?)
但是,istream函数本身并不是虚拟的,因此我不能让子类具有进行延迟加载的功能。 streambuf函数是受保护的,但是它们受到保护,所以我不能简单地让那些函数(从字符串流之类的东西)加载另一个streambuf并将其调用转发给它,因为它们受到了保护。我不确定我还可以通过哪些其他方式装饰它。
在某处有惰性加载装饰器吗?