std::ctype<CharT>:: widen, do_widen
|
ヘッダーで定義
<locale>
|
||
|
public
:
CharT widen ( char c ) const ; |
(1) | |
|
public
:
const char * widen ( const char * beg, const char * end, CharT * dst ) const ; |
(2) | |
|
protected
:
virtual CharT do_widen ( char c ) const ; |
(3) | |
|
protected
:
virtual const char * do_widen ( const char * beg, const char * end, CharT * dst ) const ; |
(4) | |
do_widen
の最も派生したクラスのオーバーロードを呼び出す。オーバーロード(1)は
do_widen
(
c
)
を、オーバーロード(2)は
do_widen
(
beg, end, dst
)
を呼び出す。
[
beg
,
end
)
内の各文字について、対応するワイド文字を
dst
が指す文字配列の連続する位置に書き込みます。
ワイド化は常にワイド文字を返しますが、一意で明確に定義されたワイド化変換が保証され、かつ( narrow() によって)可逆性が保証されているのは、 基本ソース文字セット (C++23まで) 基本文字セット (C++23以降) からの文字のみです。実際には、マルチバイト表現が単一バイトであるすべての文字は通常、対応するワイド文字にワイド化され、残りの可能な単一バイト値は通常、同じプレースホルダー値(一般的に CharT ( - 1 ) )にマッピングされます。
拡張が成功した場合、 is() が認識するすべての文字分類カテゴリが保持されます。
目次 |
パラメータ
| c | - | 変換する文字 |
| dflt | - | 変換失敗時に返すデフォルト値 |
| beg | - | 変換対象の文字配列の先頭文字へのポインタ |
| end | - | 変換対象の文字配列の終端次ポインタ |
| dst | - | 格納先文字配列の先頭要素へのポインタ |
戻り値
例
#include <iostream> #include <locale> void try_widen(const std::ctype<wchar_t>& f, char c) { wchar_t w = f.widen(c); std::cout << "The single-byte character " << +(unsigned char)c << " widens to " << +w << '\n'; } int main() { std::locale::global(std::locale("cs_CZ.iso88592")); auto& f = std::use_facet<std::ctype<wchar_t>>(std::locale()); std::cout << std::hex << std::showbase << "In Czech ISO-8859-2 locale:\n"; try_widen(f, 'a'); try_widen(f, '\xdf'); // German letter ß (U+00df) in ISO-8859-2 try_widen(f, '\xec'); // Czech letter ě (U+011b) in ISO-8859-2 std::locale::global(std::locale("cs_CZ.utf8")); auto& f2 = std::use_facet<std::ctype<wchar_t>>(std::locale()); std::cout << "In Czech UTF-8 locale:\n"; try_widen(f2, 'a'); try_widen(f2, '\xdf'); try_widen(f2, '\xec'); }
出力例:
In Czech ISO-8859-2 locale: The single-byte character 0x61 widens to 0x61 The single-byte character 0xdf widens to 0xdf The single-byte character 0xec widens to 0x11b In Czech UTF-8 locale: The single-byte character 0x61 widens to 0x61 The single-byte character 0xdf widens to 0xffffffff The single-byte character 0xec widens to 0xffffffff
不具合報告
以下の動作変更の欠陥報告書は、以前に公開されたC++規格に対して遡及的に適用されました。
| DR | 適用対象 | 公開時の動作 | 正しい動作 |
|---|---|---|---|
| LWG 153 | C++98 |
widen
は常にオーバーロード (4) を呼び出していた
|
対応するオーバーロードを呼び出す |
関連項目
do_narrow
を呼び出す
(公開メンバ関数) |
|
|
文字をワイド文字に変換する
(
std::basic_ios<CharT,Traits>
の公開メンバ関数)
|
|
|
可能であれば、単一バイトのナロー文字をワイド文字に変換する
(関数) |