std::istream
에서 wxXmlDocument
을로드하고 싶습니다. wxWidget
이 표준 입/출력 스트림을 사용하여 컴파일 되더라도, 불행히도 Load(std::istream&)
멤버 함수가 없습니다.std :: istream에서 wxXmlDocument를로드하는 방법은 무엇입니까?
가치있는 점은 MacOS에서 wxWidgets 3.1.0을 사용하고 있다는 것입니다.
std::istream
에서 wxXmlDocument
을로드하고 싶습니다. wxWidget
이 표준 입/출력 스트림을 사용하여 컴파일 되더라도, 불행히도 Load(std::istream&)
멤버 함수가 없습니다.std :: istream에서 wxXmlDocument를로드하는 방법은 무엇입니까?
가치있는 점은 MacOS에서 wxWidgets 3.1.0을 사용하고 있다는 것입니다.
내가 wxXmlDocument
가 Load(wxInputStream&)
을 제공하기 때문에, 솔루션이 같은 어댑터 정의 할 수 있습니다, 대안이 있는지 모르겠지만 : XML을로드
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;
}
};
을 그리고 그것을 사용 :
void f(std::istream &istream) {
wxXmlDocument xml;
myStdInputStreamAdapter inputStreamAdapter(istream);
xml.Load(inputStreamAdapter);
}
그리고 그 대답은 나에게도 좋을 것입니다. 다시 한번, 왜 그것이 뉘앙스가 내려 졌는지를 아는 것은 흥미로울 것입니다. –
이 솔루션의 문제점은'std :: istream :: read'가'eof'를 만나면'setstate (failbit | eofbit)'입니다. 예를 들어,'wxDocument :: LoadObject' 중에'myStdInputStreamAdapter'를 사용하여'wxXmlDocument'를로드한다면, 스트림은 실패 상태가되고, 당신이 그것을 지우지 않으면'wxLogError'를 얻습니다. 더 좋은 방법이 있습니까? – roberti42
'std :: istream :: peak'와'std :: istream :: readsome'을 호출하여 문제를 해결했습니다; 이제'wxInputStream :: OnSysRead' [documentation] (http://docs.wxwidgets.org/3.1.0/classwx_input_stream.html#a8ebacd18964a4b169a62ad9190cab4d5)에 따라'm_lasterror '를 설정했습니다. – roberti42
왜 이것이 downvoted되었는지 확실하지 않은 질문은 나에게 완벽하게 좋은 것처럼 보입니다. 적어도 0으로 다시 upvoted. –