最終更新日時:
が更新

履歴 編集

function
<locale>

std::collate_byname::コンストラクタ

explicit collate_byname(const char* name, size_t refs = 0);   // (1) C++98
explicit collate_byname(const string& name, size_t refs = 0); // (2) C++98

概要

名前で指定したロケールの、文字列の照合ファセットオブジェクトを構築する。

  • (1) : ロケール名をconst char*で受け取る
  • (2) : ロケール名をstringで受け取る

効果

  • (1) : nameを名前としてlocale(const char*)で構築されるロケールの、collateファセットと等価な仮想関数の意味論を持つよう構築する。refsは基底クラスのコンストラクタへ渡される
  • (2) : collate_byname(name.c_str(), refs)と同じ効果を持つ

例外

nameが妥当なロケール名でない場合、もしくはヌルポインタである場合、std::runtime_errorを送出する。

備考

refsは、このファセットの参照カウントの初期値である。

  • refs == 0の場合、このファセットを保持するlocaleオブジェクトが破棄されるとき、ファセットも破棄される
  • refs == 1の場合、localeオブジェクトの破棄によってファセットが破棄されることはない

妥当なロケール名は処理系定義である。"C"と、処理系のネイティブロケールを表す空文字列""は、すべての処理系でサポートされる。

#include <iostream>
#include <locale>

int main()
{
  // ファセットのデストラクタはprotectedであるため、
  // newで確保してlocaleに所有権を渡す
  std::locale a{std::locale::classic(), new std::collate_byname<char>{"C"}};

  // 同じ名前で構築したロケール
  std::locale b{"C"};

  const auto& fa = std::use_facet<std::collate<char>>(a);
  const auto& fb = std::use_facet<std::collate<char>>(b);

  const char x[] = "abc";
  const char y[] = "abd";

  // bynameファセットは、同じ名前で構築したロケールのファセットと同じ意味論を持つ
  std::cout << std::boolalpha
            << (fa.compare(x, x + 3, y, y + 3) == fb.compare(x, x + 3, y, y + 3))
            << std::endl;
}

出力

true

バージョン

言語

  • C++98

関連項目