gpt4 book ai didi

c++ - 如何从 std::istream 加载 wxXmlDocument?

转载 作者:行者123 更新时间:2023-11-30 05:13:52 27 4
gpt4 key购买 nike

我想从 std::istream 加载一个 wxXmlDocument 但不幸的是,没有 Load(std::istream&) 成员函数,即使 wxWidget 是使用标准输入/输出流编译的。

为了它的值(value),我在 macOS 上使用 wxWidgets 3.1.0。

最佳答案

我不知道是否有其他选择,但是,由于 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);
}

关于c++ - 如何从 std::istream 加载 wxXmlDocument?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43711288/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com