std::wbuffer_convert<Codecvt,Elem,Tr>::wbuffer_convert

来自cppreference.com
wbuffer_convert() : wbuffer_convert(nullptr) { }
(1)
explicit wbuffer_convert( std::streambuf* bytebuf,

                          Codecvt* pcvt = new Codecvt,

                          state_type state = state_type() );
(2)
wbuffer_convert(const std::wbuffer_convert&) = delete;
(3) (C++14 起)
1) 默认构造函数。
2) 以指定的底层字节流、指定的 codecvt 平面和指定的初始转换状态构造 wbuffer_convert 对象(所有参数均为可选)。
3) 复制构造函数被删除。 wbuffer_convert可复制构造 (CopyConstructible)

参数

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ß水🍌