# std::wbuffer_convert

< cpp‎ | locale

定义于头文件 `<locale>` |  |
template<class Codecvt, class Elem = wchar_t, class Tr = std::char_traits<Elem> > class wbuffer_convert : public std::basic_streambuf<Elem, Tr> |  | (C++11 起) (C++17 中弃用)

`std::wbuffer_convert` 是 std::basic_streambuf<char> 类型流缓冲上的包装器，并给予它 std::basic_streambuf<Elem> 的外观。所有通过 `std::wbuffer_convert` 进行的 I/O 都会经历平面 `Codecvt` 所定义的字符转换。 `std::wbuffer_convert` 假设拥有转换平面的所有权，而不能使用 locale 所管理的转换平面。适用于 `std::wbuffer_convert` 的标准平面对于 UTF-8/UCS2 和 UTF-8/UCS4 转换是 std::codecvt_utf8 ，而对于 UTF-8/UTF-16 转换是 std::codecvt_utf8_utf16 。

此类模板令 std::basic_filebuf 的隐式字符转换功能对任何 std::basic_streambuf 可用。

### 成员类型

成员类型 | 定义
`state_type` | `Codecvt::state_type`

### 成员函数

(构造函数) | 构造新的 wbuffer_convert (公开成员函数)
operator= | 复制赋值运算符被删除 (公开成员函数)
(析构函数) | 析构 wbuffer_convert 及其转换平面 (公开成员函数)
rdbuf | 返回或替换底层窄流缓冲 (公开成员函数)
state | 返回当前转换状态 (公开成员函数)

### 参阅

字符转换 | 本地环境定义多字节 (UTF-8, GB18030) | UTF-8 | UTF-16
--- | --- | --- | ---
UTF-16 | `mbrtoc16` / `c16rtomb`(有 C11 的 DR488) | `codecvt`<char16_t, char, mbstate_t> `codecvt_utf8_utf16`<char16_t> `codecvt_utf8_utf16`<char32_t> `codecvt_utf8_utf16`<wchar_t> | N/A
UCS2 | `c16rtomb`(无 C11 的 DR488) | `codecvt_utf8`<char16_t> `codecvt_utf8`<wchar_t>(Windows) | `codecvt_utf16`<char16_t> `codecvt_utf16`<wchar_t>(Windows)
UTF-32 | `mbrtoc32` / `c32rtomb` | `codecvt`<char32_t, char, mbstate_t> `codecvt_utf8`<char32_t> `codecvt_utf8`<wchar_t>(非 Windows) | `codecvt_utf16`<char32_t> `codecvt_utf16`<wchar_t>(非 Windows)
系统宽 UTF-32(非 Windows) UCS2(Windows) | `mbsrtowcs` / `wcsrtombs` `use_facet`<`codecvt` <wchar_t, char, mbstate_t>>(`locale`) | 无 | 无

wstring_convert (C++11)(C++17 中弃用) | 进行宽字符串和字节字符串之间的转换 (类模板)
codecvt_utf8 (C++11)(C++17 中弃用) | 在 UTF-8 与 UCS2/UCS4 间转换 (类模板)
codecvt_utf8_utf16 (C++11)(C++17 中弃用) | 在 UTF-8 与 UTF-16 间转换 (类模板)