Copyright 1999 Rogue Wave Software
Copyright 1999 Sun Microsystems, Inc.
はじめに
Tools.h++ は、業界標準のひとつになっています。 Tools.h++ は、さまざまなコンパイラメーカーによって、それぞれのコンパイラに付属させる標準ライブラリとして選ばれています。このライブラリは、多数のコンパイラやオペレーティングシステムに移植され、世界中で使用されています。このため、プログラミングにどのような開発プラットフォームを選んでも、ほとんどの場合、Tools.h++ を使用することができます。
Tools.h++ のこの新バージョンは、標準の C++ ライブラリにもとづいて作成されています。このバージョンへの移行を容易にするために、Tools.h++ には使いやすいオブジェクト指向インタフェースと、信頼性の高い上方への移行手順が用意されています。Tools.h++ を使用すると、標準の C++ ライブラリの改版があるたびに、その版を組み込むことができます。
新しい Tools.h++ パッケージには、次のものが含まれています。
RWCString に完備された演算子と関数を使用すると、単一バイト文字列と複数バイト文字列を操作できます。また、クラス RWWstring を使用して、ワイド文字の列の操作をサポートできます。どちらのクラスも、連結、比較、インデックス付け (オプションで境界検査が可能)、入出力、大文字と小文字の変換、取り除き、他のさまざまな関数を簡単に実行することができます。クラス RWCSubString と RWWSubString は、部分文字列の抽出と代入をサポートします。クラス RWCRegexp と RWCRExpr は正規表現によるパターン検索をサポートします。クラス RWCTokenizer と RWWTokenizer は、それぞれ単一バイト文字列やワイド文字列をトークンに分割することができます。
文字列内の情報の検索に、前よりも高度なパターンマッチングツールを使用できます。新しい Tools.h++ の拡張正規表現機能は、ANSI/ISO 標準の POSIX.2 (ポータブルオペレーティングシステムインタフェース) の機能のサブセットから構成されています。この機能を使用するには標準 C++ ライブラリが必要です。
ある日付から別の日付までの日数や、ある日付が表す曜日を計算します。また、日数や時間を任意の書式で読み込んだり書き込んだりするなど、さまざまな処理を行なうことができます。Tools.h++ を使用すると、時間を簡単に操作できます。
クラス RWLocale の便利で使いやすいフレームワークによってソフトウェアを国際化したり、クラス RWTimeZone を使用して時間帯と夏時間を操作したりできます。ライブラリ全体は 8 ビットクリーンであるため、任意の 8 ビット文字セットで使用することができます。埋め込みヌルは完全にサポートされています。
バイナリストリームを活用して、オペレーティングシステム間で情報を交換することができます。エンディアンストリーム機構では情報の発生源であるオペレーティングシステムの記録を保持するため、ストリームを、システム固有のサイズやバイト順序に関係なくどのシステムでも読み取ることができます。
マルチスレッド安全機能を利用できます。マルチスレッドオプションを使用してライブラリをコンパイルすると、内部の完全性を維持するために十分な内部ロック能力を備えた、マルチスレッド安全システム機能が使用されます。
Tools.h++ のこのバージョンでは、現時点でも強力かつ高度な記憶機能がさらに強化されています。テンプレートにもとづいたコレクションを含むほとんどの Tools.h++ コレクションに、オブジェクトのポインタの関係を維持する同形持続性がサポートされています。同形持続性を独自のクラスに実装することもできます。RWCollectable から継承するオブジェクトには多相持続性があります。この機能を使用すると、これはポインタの関係を維持するだけでなく、オブジェクトの型を知らなくてもそれらのオブジェクトを復元できます。
標準 C++ ライブラリコンテナクラスにもとづいた、28 の新しいまたは再設計されたクラステンプレートがあります。開発環境で標準 C++ ライブラリをサポートしている場合は、これらのクラスへの完全なインタフェースを使用できます。標準 C++ ライブラリをサポートしていない場合、Tools.h++ は、同じインタフェースのサブセットを使用して、テンプレートにもとづいたクラスを提供します。
まだテンプレートをサポートしていないコンパイラに対応できるよう、Tools.h++ には、C++ プリプロセッサ (前処理系) と <generic.h> (ほとんどのコンパイラに付属しているヘッダファイル) を使用するテンプレートと同様のクラスセットが用意されています。これらの総称クラスに対するインタフェースは、テンプレートにもとづいたクラスと類似しているため、簡単に移行を行なうことができます。
Smalltalk-80 プログラミング環境以降にモデル化されたコレクションクラスの完全なライブラリで、Set、Bag、Queue、Stack、OrderedCollection、SortedCollection、Dictionary などが含まれています。
移行では、標準は完成に近づいていますが、まだ完全には安定していません。標準そのものが実質的に改訂される可能性はまずありませんが、1997 年まで細かな調整と認可が続きます。
また、移行では、コンパイラは標準に向けてさまざまな段階を追って進化します。当分の間、名前空間、省略時のテンプレート引数、メンバー関数テンプレート、入れ子のクラステンプレートなどの新しい言語機能が、コンパイラによってサポートされていたり、サポートされていなかったりします。一部のコンパイラが、標準 C++ ライブラリのあるバージョンを組み込んでいない可能性もあります。必要な言語機能をサポートするかぎりにおいてのみ、標準に準拠するバージョンが多数出てくるでしょう。市販のコンパイラが実際に正確な C++ 言語を実装するか、標準の記述どおりに標準 C++ ライブラリを組み込むようになるまでには、かなりの時間がかかるはずです。
最後に、移行期間中の開発者の状況を説明します。開発者は将来の標準に向けて設計と実装の改良を担当します。変更は、開発環境、アプリケーションの領域、企業の性格による評価に従って行われます。
Tools.h++ の目標は、最新の C++ の技術に合わせて独自のペースで移行しながら開発を行なうときに、その一貫性を保つことにあります。
Tools.h++ のこのバージョンでは、STL または標準テンプレートライブラリと通常呼ばれる標準 C++ ライブラリのコンテナとの統合に力を注ぎました。各標準コンテナは、新しいまたは再設計された Tools.h++ コレクションクラステンプレートの中に含まれています。テンプレートの詳細については、第 10 章「コレクションクラステンプレート」を参照してください。次に、Tools.h++ と標準 C++ ライブラリの統合の主な設計目標を、それらがこのバージョンでどのように反映されているかを示す例とともに示します。
標準 C++ ライブラリを活用して基本の C++ 言語よりも高度な基礎を作成することによって効果を上げる。
C++ 標準の主要な利点をサポートして、さまざまなメーカーが提供するライブラリ、モジュール、クラス、アルゴリズムを、相互に高レベルで簡単に運用できるようにする。
標準 C++ ライブラリへのアクセスを維持する。
標準 C++ ライブラリを高機能なオブジェクト指向のインタフェースによって強化する。
標準 C++ ライブラリをより単純なインタフェースによって強化して、危険性を減らし、クライアントコードの保守を容易にする。
Tools.h++ の旧バージョンで書かれたコードに対するユーザーの投資を保護する。
開発者に対して、標準 C++ に向けての移行をほとんど混乱することなく行なうための手段を提供する。
たとえば、Tools.h++ は、標準 C++ ライブラリがあってもなくても使用できます。開発環境で Tools.h++ との使用を保証された標準 C++ ライブラリのバージョンをサポートしている場合は、標準 C++ ライブラリコンテナクラスを使用して実装された 28 の新しいまたは再設計されたクラステンプレートを提供します。標準 C++ ライブラリをサポートしていない場合は、Tools.h++ の旧バージョンの技術を使用して実装された多数の同じクラステンプレートへの部分的なインタフェースを提供します。コンパイル時に適切な実装が自動的、透過的に選択されます。より制限されたインタフェースをコーディングすれば、標準 C++ ライブラリが使用可能になると同時に、このライブラリを活用できます。
Tools.h++
は、クラス RWCString と RWWString を引き続き使用します。これらのクラスは、その部分文字列クラスと、共同で動作する正規表現クラスとトークナイザクラスとともに、長い間、ライブラリの最も便利で強力なツールと考えられてきました。この機能群は、標準 C++ ライブラリでは提供されません。C++ 標準の string と wstring はアプリケーションで使用できますが、Tools.h++ と標準の文字列の間で変換を行なわなければならない場合、コピーによるオーバーヘッドが起こる可能性があります。Tools.h++
は、クラス RWLocale を引き続き使用します。このリリースの時点では、C++ 標準ロケールクラス仕様は、ANSI/ISO 標準委員会により検討中です。Tools.h++ は、独自の例外階層を引き続き使用します。これは、C++ 標準草案の例外階層に似ています。標準の例外階層がより広く使用可能になるまで、切り替えは考えていません。標準の例外をアプリケーションで使用することはできますが、各自の try ブロックから Tools.h++ ライブラリへ呼び出しを行うときに Tools.h++ の例外も捕獲できるようにしておく必要があります。
Tools.h++ では、現在の草案で指定された名前空間を使用していません。現在のところ、RW 接頭辞を引き続き使用して、大域名前空間内のクラスを識別します。コンパイラで可能であれば、このことが、アプリケーションでの名前空間の使用を妨げることはありません。
C++ の上級ユーザーの場合は、Stroustrup [1991]、Lippman [1991]、または Ellis and Stroustrup [1990] とともにこのマニュアルを読むことができます。後者は、「ARM (the Annotated Reference Manual)」と呼ばれます。これらの資料の簡潔で正確な説明は、この言語を学ぶうえで非常に参考になります。(この 2 冊には日本語訳があります。付録 D 参照)
main() { . . // 何かが起こる . }
字体または記号 | 意味 | 例 |
---|---|---|
AaBbCc123 | コマンド名、ファイル名およびディレクトリ名を示します。または、画面上のコンピュータ出力を示します。 |
.login ファイルを編集します。ls -a を使用してすべてのファイルを表示します。
system% |
AaBbCc123 | ユーザが入力する文字を、画面上のコンピュータ出力とは区別して示します。 |
system% su
password: |
AaBbCc123 | 変数を示します。実際に使用する特定の名前または値で置き換えます。 | ファイルを削除するには、rm filename と入力します。 |
『 』 | 参照する書名を示します。 | 『コードマネージャ・ユーザーズガイド』を参照してください。 |
「 」 | 参照する章、節を示します。また、ボタンやメニューなど、強調する単語を囲む場合にも使用します。 | 第 5 章「衝突の回避」を参照してください。 |
手順の 1 ステップを示します。 | 適用ボタンをクリックします。 | |
階層メニューのサブメニューを選択することを示します。 | 作成: 「返信」 「送信者へ」 |
コード例はボックスで囲んで示します。たとえば、次のように表示されます。
system% |
system$ |
system# |