我会很简短:我有这段代码:
QByteArray MyNBT::decompressData(QByteArray data)
{
filtering_streambuf<input> in;
std::string _data = data.data();
in.push( gzip_decompressor() );
in.push( boost::iostreams::back_inserter(_data) );
//in.push( std::back_inserter(_data) );
std::stringstream _sstream;
boost::iostreams::copy(in, _sstream);
QByteArray out = _sstream.rdbuf()->str().c_str();
return out;
}
并且在此行给出了错误:
in.push( boost::iostreams::back_inserter(_data) );
//in.push( std::back_inserter(_data) );
错误是:
/usr/include/boost/iostreams/chain.hpp:244: error: invalid application of 'sizeof' to incomplete type 'boost::STATIC_ASSERTION_FAILURE<false>'
BOOST_STATIC_ASSERT((is_convertible<category, Mode>::value));
^
编译器一次又一次地抛出此错误,std::back_inserter(_data)
而boost则一次引发两次。
提前致谢。
back_inserter是做什么的?
的确。它将元素插入到容器的背面。
不过,您似乎想要的是afront_reader
或container_source
。
好吧,我没有Qt的,但我不得不用运气array_source
来适应你的输入(注意它是如何工作的同样好std::string
,std::vector
,std::array
甚至只是const char []
输入):
#include <fstream>
#include <iostream>
#include <boost/iostreams/filtering_stream.hpp>
#include <boost/iostreams/filter/gzip.hpp>
#include <boost/iostreams/copy.hpp>
#include <sstream>
int main() {
using namespace boost::iostreams;
filtering_streambuf<input> in;
#if 0
std::string _data {
#else
std::vector<char> _data {
#endif
char(0x1f), char(0x8b), char(0x08), char(0x00), char(0xca), char(0xb5),
char(0x07), char(0x53), char(0x00), char(0x03), char(0xcb), char(0x48),
char(0xcd), char(0xc9), char(0xc9), char(0x57), char(0x28), char(0xcf),
char(0x2f), char(0xca), char(0x49), char(0xe1), char(0x02), char(0x00),
char(0x2d), char(0x3b), char(0x08), char(0xaf), char(0x0c), char(0x00),
char(0x00), char(0x00)
};
in.push( gzip_decompressor() );
in.push( boost::iostreams::array_source(_data.data(), _data.size()) );
std::stringstream _sstream;
boost::iostreams::copy(in, _sstream);
std::cout << _sstream.rdbuf();
}
该程序的输出当然是 hello world
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句