我想从wxXmlDocument
加载std::istream
但不幸的是,即使使用标准输入/输出流编译Load(std::istream&)
,也没有wxWidget
成员函数。
对于它的价值,我在macOS上使用wxWidgets 3.1.0。
答案 0 :(得分:1)
我不知道是否有其他选择,但由于wxXmlDocument
提供了Load(wxInputStream&)
,因此解决方案可以是定义这样的适配器:
class myStdInputStreamAdapter : public wxInputStream {
public:
myStdInputStreamAdapter(std::istream &s): stream{s} {}
protected:
std::istream &stream;
virtual size_t OnSysRead(void *buffer, size_t bufsize) {
std::streamsize size = 0;
stream.peek();
if (stream.fail() || stream.bad()) {
m_lasterror = wxSTREAM_READ_ERROR;
} else if (stream.eof()) {
m_lasterror = wxSTREAM_EOF;
} else {
size = stream.readsome(static_cast<std::istream::char_type *>(buffer),
bufsize);
}
return size;
}
};
然后用它来加载xml:
void f(std::istream &istream) {
wxXmlDocument xml;
myStdInputStreamAdapter inputStreamAdapter(istream);
xml.Load(inputStreamAdapter);
}