class template
<locale>
std::wbuffer_convert
template < class Codecvt,
class Elem = wchar_t,
class Tr = char_traits<Elem> > class wbuffer_convert
: public std::basic_streambuf<Elem,Tr>;
Convert to/from wide buffer
Stream buffer class that handles (wide) characters of type Elem with Tr as traits.
The class uses another stream buffer of bytes (narrow characters of type char
) as its underlying byte stream buffer to/from which it converts wide characters of type Elem (its second template argument).
For the conversions, the class uses a conversion object of type Codecvt, of which it acquires ownership on construction, becoming responsible for its deletion at some point (when it is itself destroyed).
Template parameters
- Codecvt
- Type of the conversion object: This shall be a class with the same properties as the codecvt locale facet, such as one of the standard classes defined in header <codecvt>.
- Elem
- Wide character type.
This shall correspond to the internal type of the codecvt-like conversion object.
- Tr
- Character traits class.
Defaults to: char_traits<Elem>
Object state
The object stores internally the following data elements:
type | description |
streambuf* | A pointer to its underlying byte stream buffer, accessed with member rdstate |
Codecvt* | A pointer to a conversion object |
state_type | A conversion state object, accessed with member state |
Member types
member type | definition |
state_type | Codecvt::state_type |
Member functions
- (constructor)
- Construct wbuffer_convert (public member function
)
- rdbuf
- Get/set underlying byte stream buffer (public member function
)
- state
- Conversion shift state (public member function
)
Example
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
|
// wbuffer_convert example
#include <iostream> // std::cout, std::ios, std::wostream
#include <locale> // std::wbuffer_convert
#include <codecvt> // std::codecvt_utf8
#include <fstream> // std::filebuf
int main ()
{
// file buffer (narrow buffer):
std::filebuf myfile;
myfile.open("test.txt",std::ios::out);
// conversor (wide buffer -> narrow buffer, using UTF-8):
std::wbuffer_convert<std::codecvt_utf8<wchar_t>> bufconv (&myfile);
// stream (wide buffer):
std::wostream mystream (&bufconv);
mystream << L"Test"; // writes wide string to file (UTF-8)
return 0;
}
|