protected:
virtual void imbue(const locale& loc); // (1) C++03
void imbue(const locale& loc) override; // (1) C++17
概要
ロケールを設定する。
このメンバ関数はprotectedであり、std::basic_streambufのpublicメンバ関数pubimbue()を通して間接的に呼び出される。
事前条件
ファイルが先頭以外の位置にあり、かつ現在のロケールのcodecvtファセットのencoding()が状態依存のエンコーディングを示す場合、そのファセットがlocの対応するファセットと同じであること。
効果
この呼び出し以降に挿入・抽出される文字が、次にimbueが呼び出されるまでlocに従って変換されるようにする。
戻り値
なし
備考
この関数は、それまでに変換した文字の再変換を必要とする場合がある。またそのために、処理系がファイルの元の内容を復元できることを必要とする場合がある。
例
#include <iostream>
#include <fstream>
#include <locale>
// basic_filebufを継承して、protectedなimbueの呼び出しを観測する
struct my_filebuf : std::filebuf {
protected:
void imbue(const std::locale& loc) override
{
std::cout << "imbue" << std::endl;
std::filebuf::imbue(loc);
}
};
int main()
{
my_filebuf buf;
buf.open("test.txt", std::ios_base::out);
// pubimbue()を通してimbue()が呼ばれる
buf.pubimbue(std::locale::classic());
}
出力
imbue
バージョン
言語
- C++98