我想包一个vector<char>
with std::istream
(因此读取向量将通过istream
界面)
有什么方法可以做到呢?
你会定义一个streambuf
子类包装vector
,并将其实例传递给 istream 构造函数。
如果构造后数据没有改变,则使用以下命令设置数据指针就足够了streambuf::setg()
;其他成员的默认实现做了正确的事情:
template<typename CharT, typename TraitsT = std::char_traits<CharT> >
class vectorwrapbuf : public std::basic_streambuf<CharT, TraitsT> {
public:
vectorwrapbuf(std::vector<CharT> &vec) {
setg(vec.data(), vec.data(), vec.data() + vec.size());
}
};
std::vector<char> data;
// ...
vectorwrapbuf<char> databuf(data)
std::istream is(&databuf);
如果您需要比这更高级的东西,请覆盖streambuf::underflow
method.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)