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;
}
|