std::wbuffer_convert<Codecvt,Elem,Tr>::wbuffer_convert
< 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 | - | 指向独立(不为 locale 所管理)的 std::codecvt 平面的指针。若此指针为空则行为未定义。 |
state | - | 字符转换状态的初始值 |
缺陷报告
下列更改行为的缺陷报告追溯地应用于以前出版的 C++ 标准。
DR | 应用于 | 出版时的行为 | 正确行为 |
---|---|---|---|
P0935R0 | C++11 | 默认构造函数曾为 explicit | 使之为隐式 |
示例
运行此代码
#include <iostream> #include <sstream> #include <locale> #include <codecvt> int main() { // 包装 UTF-8 字符串流于 UCS4 wbuffer_convert 中 std::stringbuf utf8buf(u8"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 << "Reading from a UTF-8 stringbuf via wbuffer_convert:\n"; for(wchar_t c; ucsbuf.get(c); ) std::cout << std::hex << std::showbase << c << '\n'; // 包装具 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 << "Sending UCS4 data to std::cout via wbuffer_convert:\n"; out << L"z\u00df\u6c34\U0001f34c\n"; }
输出:
Reading from a UTF-8 stringbuf via wbuffer_convert produces 0x7a 0xdf 0x6c34 0x1f34c Sending UCS4 data to std::cout via wbuffer_convert: zß水🍌