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

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 の同名メンバーと同じ内容で定義されています。