最終更新日時(UTC): 2024年06月11日 13時45分38秒
Akira Takahashi が更新

履歴 編集

function
<ios>

# std::ios_base::imbue

    locale imbue(const locale& loc);

## 概要

ロケールを設定する。

## 効果

`*this` で使用するロケールを引数 `loc` に設定した後、`register_callback` で登録されたペア `(fn, index)` を `(*fn)(imbue_event, *this, index)` として呼び出す。

## 戻り値

`getloc()` の変更前の値

## 備考

- 呼び出されたコールバック関数の内部で `getloc()` を呼び出した場合、新たに設定されたロケール（つまり引数 `loc` で指定されたロケール）が返される。
- 設定されたロケールは、ロケール依存の入出力に使用される。ただし、`ios_base` 自体にはロケール依存の入出力関数は存在しない。実際にロケール依存の入出力を行うのは、派生クラスである `basic_istream` と `basic_ostream`（および、それらの派生クラス `basic_iostream`）である。

## 例

    #include <iostream>
    #include <locale>

    int main()
    {
      std::cout.imbue(std::locale::classic());
      std::cout << 1234.5 << std::endl;
      std::cout.imbue(std::locale("en_US"));
      std::cout << 1234.5 << std::endl;
      std::cout.imbue(std::locale("de_DE"));
      std::cout << 1234.5 << std::endl;
    }

### 出力例

    1234.5
    1,234.5
    1.234,5

なお、ロケールの名称（ここでは `en_US` と `de_DE`）は環境依存のため、上記の例は動作しないこともある。
その場合でも、ロケールの名称を当該環境で適切なものに変更すれば動作するはずである。
また、最初の行（`C` ロケール）以外の出力はロケール依存のため、たとえこれらのロケールが使用できたとしても上記のようには出力されない可能性もある（が、一般的にはこのように出力される）。

## バージョン

## 言語

- C++98

### 処理系

- Clang: 3.0 ✅, 3.1 ✅, 3.2 ✅, 3.3 ✅, 3.4 ✅, 3.5.0 ✅, 3.6.0 ✅, 3.7.0 ✅, 3.8.0 ✅
- GCC: 4.3.6 ✅, 4.4.7 ✅, 4.5.4 ✅, 4.6.4 ✅, 4.7.3 ✅, 4.8.1 ✅, 4.8.2 ✅, 4.9.0 ✅, 4.9.1 ✅, 4.9.2 ✅, 5.1.0 ✅, 5.2.0 ✅, 6.0.0 ✅
- ICC: ??
- Visual C++: ??

## 参照

- `ios_base::event`
- `ios_base::event_callback`
- `ios_base::register_callback`
- `ios_base::getloc`
- `basic_ios::imbue`
- `basic_streambuf::getloc`
- `basic_streambuf::pubimbue`
- `locale`