Class template
wbuffer_convert looks like a wide stream buffer, but
performs all its I/O through an underlying byte stream buffer that you
specify when you construct it
. Like class template
wstring_convert, it
lets you specify a code conversion facet to perform the conversions,
without affecting any streams or locales
.namespace std {
template<class Codecvt, class Elem = wchar_t, class Tr = char_traits<Elem>>
class wbuffer_convert : public basic_streambuf<Elem, Tr> {
public:
using state_type = typename Codecvt::state_type;
wbuffer_convert() : wbuffer_convert(nullptr) {}
explicit wbuffer_convert(streambuf* bytebuf,
Codecvt* pcvt = new Codecvt,
state_type state = state_type());
~wbuffer_convert();
wbuffer_convert(const wbuffer_convert&) = delete;
wbuffer_convert& operator=(const wbuffer_convert&) = delete;
streambuf* rdbuf() const;
streambuf* rdbuf(streambuf* bytebuf);
state_type state() const;
private:
streambuf* bufptr;
Codecvt* cvtptr;
state_type cvtstate;
};
}