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可复制构造

参数

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