std::wbuffer_convert<Codecvt,Elem,Tr>::wbuffer_convert
来自cppreference.com
< cpp | locale | wbuffer convert
wbuffer_convert() : wbuffer_convert(nullptr) {} |
(1) | |
explicit wbuffer_convert( std::streambuf* bytebuf, Codecvt* pcvt = new Codecvt, |
(2) | |
wbuffer_convert( const std::wbuffer_convert& ) = delete; |
(3) | (C++14 起) |
1) 默认构造函数。
2) 以指定的底层字节流、指定的
codecvt
刻面和指定的初始转换状态构造 wbuffer_convert
对象(所有参数均为可选)。参数
bytebuf | - | 指向作为底层窄字符流作用的 std::streambuf 的指针 |
pcvt | - | 指向独立(不为本地环境所管理)的 std::codecvt 刻面的指针。若此指针为空则行为未定义。 |
state | - | 字符转换状态的初始值 |
缺陷报告
下列更改行为的缺陷报告追溯地应用于以前出版的 C++ 标准。
缺陷报告 | 应用于 | 出版时的行为 | 正确行为 |
---|---|---|---|
P0935R0 | C++11 | 默认构造函数曾为 explicit | 使之为隐式 |
示例
运行此代码
#include <codecvt> #include <iostream> #include <locale> #include <sstream> int main() { // 包装 UTF-8 字符串流于 UCS4 wbuffer_convert 中 std::stringbuf utf8buf("z\u00df\u6c34\U0001f34c"); // 或 u8"zß水🍌" // 或 "\x7a\xc3\x9f\xe6\xb0\xb4\xf0\x9f\x8d\x8c"; std::wbuffer_convert<std::codecvt_utf8<wchar_t>> conv_in(&utf8buf); std::wistream ucsbuf(&conv_in); std::cout << "通过 wbuffer_convert 从 UTF-8 stringbuf 读取: "; << std::hex << std::showbase; for (wchar_t c; ucsbuf.get(c);) std::cout << static_cast<std::wint_t>(c) << ' '; // 包装具 UTF-8 的 std::cout 于 UCS4 wbuffer_convert 中以输出 UCS4 std::wbuffer_convert<std::codecvt_utf8<wchar_t>> conv_out(std::cout.rdbuf()); std::wostream out(&conv_out); std::cout << "\n通过 wbuffer_convert 向 std::cout 发送 UCS4 数据: "; out << L"z\u00df\u6c34\U0001f34c\n"; }
输出:
通过 wbuffer_convert 从 UTF-8 stringbuf 读取: 0x7a 0xdf 0x6c34 0x1f34c 通过 wbuffer_convert 向 std::cout 发送 UCS4 数据: zß水🍌