最終更新日時:
が更新

履歴 編集

class template
<locale>

std::codecvt

namespace std {
  template <class internT, class externT, class stateT>
  class codecvt : public locale::facet, public codecvt_base;
}

概要

codecvtは、内部型internTの文字列と外部型externTの文字列を相互に変換するためのロケールファセットである。

basic_filebufは、ファイル上のバイト列(外部型)とプログラム上の文字列(内部型)の変換にこのファセットを使用する。

stateTは変換の状態を保持する型であり、状態依存のエンコーディングを扱うために使用される。

メンバ関数

publicメンバ関数

名前 説明
(constructor) コンストラクタ
out 内部型から外部型に変換
in 外部型から内部型に変換
unshift 文字列を終端するためのシフト状態を戻す文字列を出力する
encoding 内部型の1文字への変換に必要な外部型の長さを取得する
always_noconv 変換を行う必要がないか判定する
length 内部型文字列への変換で消費される外部型文字列の長さを取得する
max_length 内部型の1文字への変換に必要な外部型の最大の長さを取得する

静的メンバ変数

名前 説明
static locale::id id; このファセットを識別するためのID

protectedメンバ関数

名前 説明
(destructor) デストラクタ
do_out 内部型から外部型に変換
do_in 外部型から内部型に変換
do_unshift 文字列を終端するためのシフト状態を戻す文字列を出力する
do_encoding 内部型の1文字への変換に必要な外部型の長さを取得する
do_always_noconv 変換を行う必要がないか判定する
do_length 内部型文字列への変換で消費される外部型文字列の長さを取得する
do_max_length 内部型の1文字への変換に必要な外部型の最大の長さを取得する

メンバ型

名前 説明
intern_type 内部型 internT
extern_type 外部型 externT
state_type 変換の状態を表す型 stateT

#include <iostream>
#include <locale>
#include <cwchar>

int main()
{
  using codecvt_t = std::codecvt<wchar_t, char, std::mbstate_t>;
  const auto& cv = std::use_facet<codecvt_t>(std::locale::classic());

  const char from[] = "abc";
  wchar_t to[4] = {};

  std::mbstate_t state{};
  const char* from_next = nullptr;
  wchar_t* to_next = nullptr;

  // 外部型(char)から内部型(wchar_t)へ変換する
  codecvt_t::result r = cv.in(state, from, from + 3, from_next, to, to + 3, to_next);

  *to_next = L'\0';
  std::cout << std::boolalpha << (r == codecvt_t::ok) << std::endl;
  std::wcout << to << std::endl;
}

出力

true
abc

バージョン

言語

  • C++98

関連項目