std::wbuffer_convert<Codecvt,Elem,Tr>:: wbuffer_convert
From cppreference.net
<
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부터) |
| 오버로드 | 데이터 멤버 | ||
|---|---|---|---|
bufptr
|
cvtptr
|
cvtstate
|
|
| (1) | nullptr | new Codecvt | state_type ( ) |
| (2) | bytebuf | pcvt | state |
2)
만약
pcvt
가 널 포인터인 경우, 동작은 정의되지 않습니다.
매개변수
| bytebuf | - | 기본 버퍼에 대한 포인터 |
| pcvt | - | 독립형(로캘에 의해 관리되지 않는) 패싯에 대한 포인터 |
| state | - | 문자 변환 상태의 초기값 |
예제
이 코드 실행
#include <codecvt> #include <iostream> #include <locale> #include <sstream> int main() { // UTF-8 문자열 스트림을 UCS4 wbuffer_convert로 래핑 std::stringbuf utf8buf("z\u00df\u6c34\U0001f34c"); // 또는 "\x7a\xc3\x9f\xe6\xb0\xb4\xf0\x9f\x8d\x8c" // 또는 u8"zß水🍌" std::wbuffer_convert<std::codecvt_utf8<wchar_t>> conv_in(&utf8buf); std::wistream ucsbuf(&conv_in); std::cout << "UTF-8 stringbuf에서 wbuffer_convert를 통해 읽기: " << 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 << "\nUCS4 데이터를 wbuffer_convert를 통해 std::cout으로 전송: "; out << L"z\u00df\u6c34\U0001f34c\n"; }
출력:
UTF-8 stringbuf에서 wbuffer_convert를 통해 읽기: 0x7a 0xdf 0x6c34 0x1f34c UCS4 데이터를 wbuffer_convert를 통해 std::cout으로 전송: zß水🍌
결함 보고서
다음의 동작 변경 결함 보고서들은 이전에 발표된 C++ 표준에 소급 적용되었습니다.
| DR | 적용 대상 | 게시된 동작 | 올바른 동작 |
|---|---|---|---|
| LWG 2175 | C++11 | pcvt 가 널 포인터일 수 있음 | 이 경우 동작은 정의되지 않음 |
| LWG 2176 | C++11 | 단일 인수를 받는 생성자가 암시적이었음 | 명시적으로 변경됨 |
| P0935R0 | C++11 | 기본 생성자가 명시적이었음 | 암시적으로 변경됨 |