名前空間
変種
操作

std::ctype<CharT>::widen, do_widen

提供: cppreference.com
< cpp‎ | locale‎ | ctype
 
 
 
 
ヘッダ <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)
1,2) public メンバ関数。 最も派生したクラスの protected virtual メンバ関数 do_widen を呼びます。
3) シングルバイト文字 c を最もシンプルでリーズナブルな変換を使用して対応するワイド文字表現に変換します。 一般的に、これは、マルチバイトエンコーディングが1バイトである文字 (例えば UTF-8 の U+0000〜U+007F) にのみ適用されます。
4) 文字配列 [beg, end) 内のすべての文字について、 dst の指す文字配列の連続する位置に対応するワイド化した文字を書き込みます。

ワイド化は常にワイド文字を返しますが、基本ソース文字集合 (C++ のプログラムを書くために必要なラテン文字、数字、句読点) のみが、一意で well-defined なワイド化変換を持つことが保証され、 (narrow() によって) 逆変換可能であることが保証されます。 実際のところは、マルチバイト表現が1バイトであるすべての文字は、通常、その対応するワイド文字にワイド化され、それ以外のシングルバイト値は、通常、何らかのプレースホルダー値、一般的には CharT(-1) にマップされます。

成功した場合、ワイド化は is() に既知なすべての文字分類カテゴリを維持します。

目次

[編集] 引数

c - 変換する文字
dflt - 変換が失敗した場合に生成されるデフォルト値
beg - 変換する文字の配列の最初の文字へのポインタ
end - 変換する文字の配列の最後の次へのポインタ
dst - 埋める文字の配列の最初の要素へのポインタ

[編集] 戻り値

1,3) ワイド化した文字。
2,4) end

[編集]

#include <locale>
#include <iostream>
 
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

[編集] 関連項目

do_narrow を呼びます
(パブリックメンバ関数) [edit]
文字をワイド化します
(std::basic_ios<CharT,Traits>のパブリックメンバ関数) [edit]
可能であればシングルバイト文字をワイド文字に変換します
(関数) [edit]