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.
Class template wbuffer_convert synopsis
namespace std { template<class Codecvt, class Elem = wchar_t, class Tr = std::char_traits<Elem> > class wbuffer_convert : public std::basic_streambuf<Elem, Tr> { public: typedef typename Codecvt::state_type state_type; explicit wbuffer_convert(std::streambuf* bytebuf = 0, Codecvt* pcvt = new Codecvt, state_type state = state_type()); ~wbuffer_convert(); wbuffer_convert(const wbuffer_convert&) = delete; wbuffer_convert& operator=(const wbuffer_convert&) = delete; std::streambuf* rdbuf() const; std::streambuf* rdbuf(std::streambuf* bytebuf); state_type state() const; private: std::streambuf* bufptr; // exposition only Codecvt* cvtptr; // exposition only state_type cvtstate; // exposition only }; }
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 std::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 std::codecvt<Elem, char, std::mbstate_t>.
An object of this class template stores:
bufptr — a pointer to its underlying byte stream buffer
cvtptr — a pointer to the allocated conversion object (which is freed when the wbuffer_convert object is destroyed)
cvtstate — a conversion state object
Returns: cvtstate.
std::streambuf* rdbuf() const;
Returns: bufptr.
std::streambuf* rdbuf(std::streambuf* bytebuf);
Effects: stores bytebuf in bufptr.
Returns: The previous value of bufptr.
typedef typename Codecvt::state_type state_type;
The type shall be a synonym for Codecvt::state_type.
explicit wbuffer_convert(std::streambuf* bytebuf = 0,
Codecvt* pcvt = new Codecvt, state_type state = state_type());
Requires: pcvt != nullptr.
Effects: The constructor constructs a stream buffer object, initializes bufptr to bytebuf, initializes cvtptr to pcvt, and initializes cvtstate to state.
Effects: The destructor shall delete cvtptr.