explicit time_get_byname(const char* name, size_t refs = 0); // (1) C++98
explicit time_get_byname(const string& name, size_t refs = 0); // (2) C++98
概要
名前で指定したロケールの、日時の解析ファセットオブジェクトを構築する。
- (1) : ロケール名を
const char*で受け取る - (2) : ロケール名を
stringで受け取る
効果
- (1) :
nameを名前としてlocale(const char*)で構築されるロケールの、time_getファセットと等価な仮想関数の意味論を持つよう構築する。refsは基底クラスのコンストラクタへ渡される - (2) :
time_get_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::time_get_byname<char>{"C"}};
// 同じ名前で構築したロケール
std::locale b{"C"};
const auto& fa = std::use_facet<std::time_get<char>>(a);
const auto& fb = std::use_facet<std::time_get<char>>(b);
// bynameファセットは、同じ名前で構築したロケールのファセットと同じ意味論を持つ
std::cout << std::boolalpha
<< (fa.date_order() == fb.date_order()) << std::endl;
}
出力
true
バージョン
言語
- C++98