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;
};
}
The class template describes a stream buffer that controls the
transmission of elements of type
Elem, whose character traits are
described by the class
Tr, to and from a byte stream buffer of type
streambuf. Conversion between a sequence of
Elem values and
multibyte sequences is performed by an object of class
Codecvt, which shall meet the requirements
of the standard code-conversion facet
codecvt<Elem, char, mbstate_t>.