Tools.h++ 7.0 クラスライブラリ・リファレンスマニュアル: RWLocaleSnapshot

バナーをクリックすれば目次に戻ります

Copyright 1999 Rogue Wave Software
Copyright 1999 Sun Microsystems, Inc.

## RWLocaleSnapshot

RWLocaleSnapshot RWLocale

### 形式

      #include <locale.h>
      #include <rw/locale.h>

      RWLocaleSnapshot ourLocale("");  // ユーザーの書式をカプセル化する

### 説明

  このクラスは、標準 C ライブラリ機能を使用して RWLocale インタフェースを実装します。このインタフェースを使用するには、このクラスのインスタンスを作成します。インスタンスのコンストラクタは、標準 C ライブラリ関数 (`localeconv()` や `strftime()`、さらに使用可能なら、メーカー固有のライブラリ関数など) を使用してプログラム環境を問い合わせ、インスタンス作成時に有効なフォーマット規則についてすべてを知ることができます。その後、ロケールを切り替えて、他のインスタンスを作成します。複数のインスタンスを作成することで、複数のロケールを同時に有効にすることができますが、これは標準 C ライブラリ機能では困難なことです。

  このクラスには、実行環境から取り出した情報を使用してコンストラクタが初期化した公開データメンバーセットがあります。

  > 注 - このクラスは、文字セット、照合、メッセージなどの情報はカプセル化しません。

  > 注 - RWLocaleSnapshot クラスのコンストラクタは、関数 `setlocale` を呼び出しますが、これはスレッドに対して安全ではありません。マルチスレッドで動作しても安全なアプリケーションにするには、他のスレッドでロケールに依存する関数が使用されていないことが確認できる場合にのみ、RWLocaleSnapshot のインスタンスを作成するようにしてください。確実に上記のような動作をさせるためには、最初のスレッドですべての RWLocaleSnapshot のインスタンスを作成した後で、次のスレッドを開始してください。

### 持続性

  なし

### 例

  環境変数 `LANG` のロケールを変えて、次のプログラムを実行してみてください。

      #include <rw/rwdate.h>
      #include <rw/locale.h>
      #include <iostream.h>

      main(){
       RWLocaleSnapshot *userLocale = new RWLocaleSnapshot("");
       RWLocale::global(userLocale);
       cout << RWLocale::global().asString(1234567.6543) << endl;
       // 大域的ロケールを使用して文字列を出力する
       cout << "enter a date: " << flush;
       RWDate date;
       cin >> date;
       // 日付を獲得して出力する
       cout << date << endl;
       else
       cout << "bad date" << endl;
       delete userLocale;
       return 0;
      }

### 列挙型

      enum
      RWDateOrder { DMY, MDY, YDM, YMD };

### 公開コンストラクタ

      RWLocaleSnapshot(const char* localeName = 0);

    大域的なロケール環境から形式を取り出して、RWLocale オブジェクトを作成します。標準 C ライブラリ関数 `setlocale()` を使用して、指定したロケールを設定し、次に書式情報を引き出した後、前の大域的なロケールを復元します。`localeName` が 0 ならば、現在のロケールを使用するだけです。最も役に立つ有効なロケール名は空の文字列 " " で、これは通常、環境変数 `LANG` で指定されるユーザー選択ロケールと同じものを意味します。

### 公開メンバー関数

      virtual RWCString
      asString(long) const;
      virtual RWCString
      asString(unsigned long) const;
      virtual RWCString
      asString(double f, int precision = 6,
      RWBoolean showpoint = 0) const;
      virtual RWCString
      asString(struct tm* tmbuf,char format, const RWZone& zone);
               const;
      virtual RWCString
      asString(struct tm* tmbuf,char* format,
               const RWZone& zone) const;
      virtual RWCString
      moneyAsString(double value,enum CurrSymbol = LOCAL) const;
      virtual RWBoolean
      stringToNum  (const RWCString&, double* fp) const;
      virtual RWBoolean
      stringToNum  (const RWCString&, long* ip  ) const;
      virtual RWBoolean
      stringToDate (const RWCString&, struct tm*) const;
      virtual RWBoolean
      stringToTime (const RWCString&, struct tm*) const;
      virtual RWBoolean
      stringToMoney(const RWCString&, double*   ,
                    RWLocale::CurrSymbol=LOCAL) const;

    クラス RWLocale から再定義した関数。上記の仮想関数は、クラス RWLocale で記述したインタフェースに従います。通常、自分自身内にカプセル化された `struct lconv` 値 (`<locale.h>` を参照) で指定した規則を使用して、値を文字列との間で変換しながら処理します。

### 公開データメンバー

      RWCString     decimal_point_;
      RWCString     thousands_sep_;
      RWCString     grouping_;
      RWCString     int_curr_symbol_;
      RWCString     currency_symbol_;
      RWCString     mon_decimal_point_;
      RWCString     mon_thousands_sep_;
      RWCString     mon_grouping_;
      RWCString     positive_sign_;
      RWCString     negative_sign_;
      char          int_frac_digits_;
      char          frac_digits_;
      char          p_cs_precedes_;
      char          p_sep_by_space_;
      char          n_cs_precedes_;
      char          n_sep_by_space_;
      char          p_sign_posn_;
      char          n_sign_posn_;

    上記メンバーは、`<locale.h>` 内の標準 C ライブラリ型 `lconv` の同名メンバーと同じ内容で定義されています。