1.3 Tools.h++ と C++ の標準化
C++ 言語の標準化と標準 C++ ライブラリを完成させることの利点は広く認められています。しかし、この完成を待つことなく、標準化の過程にも作業を継続することが大切です。現在、C++ の標準化は過渡期に入っています。
標準化はほとんど完成に近づいていますが、そのための作業はまだ行われています。今後、規格自体が大きく改訂になることはまずありませんが、まだ詳細にわたる調整と批准が 1997 年にも引き続き行われる予定です。
また、コンパイラも標準化に向けて、少しずつ変わっています。そのためしばらくは、名前空間、デフォルトのテンプレート引数、メンバ関数テンプレート、入れ子クラステンプレートなどの新しい機能は、対応しているコンパイラとしていないものが混在することになります。しかも、コンパイラの中には、あるバージョンの標準 C++ ライブラリが含まれていないものもあるでしょう。ただし、多くのコンパイラは、必要な言語機能をサポートするかぎり規格に適合するはずです。市場に出回っているコンパイラに規格と完全に一致した C++ 言語または標準 C++ ライブラリが実際に実装されるまでには、まだしばらく時間がかかります。
アプリケーション開発者が、標準化に向けて、ソフトウェアの設計と実装を行っているとします。開発環境、アプリケーションの分野および会社の方針によって、移行の状況は異なるはずです。
Tools.h++ の目標は、開発者がそれぞれの状況に応じて標準規格に移行する際に、最新の C++ 技術の利用を実現し、統一性を提供することにあります。
1.3.1 規格の利用
新バージョンの Tools.h++ で最も難しかったことは、ANSI/ISO 標準 C++ ライブラリとの関係を確立することでした。Rogue Wave 社は、製品を規格に準拠するように設計するだけでなく、規格の良い部分を最大限に利用することに全力を傾け、zより役に立ち効果的なクラスライブラリを提供することを目標としています。当社のライブラリの C++ 規格との統合は、この Tools.h++ バージョン 7 から始まります。
このバージョンの Tools.h++ では、STL または 標準テンプレートライブラリ (Standard Template Library) とも呼ばれる、標準 C++ ライブラリコンテナとの統合に焦点が当てられています。Tools.h++ コレクションクラステンプレートは、標準コンテナを包含するように、新規に作成または再設計されています。テンプレートの詳しい説明に関しては、第 11 章 を参照してください。Tools.h++と標準 C++ ライブラリの統合のための、主な設計目標とその具体的な例を、以下に示します。
設計目標: 資源の活用
基本 C++ 言語よりもさらに高度な基礎で構築されている標準 C++ ライブラリを活用します。
例えば、Tools.h++ のコレクションは、標準 C++ ライブラリのコンテナを使用して作られています。Tools.h++ は規格に基づいて構築されているため、これらのコレクションが簡単に標準の反復子を提供でき、その結果豊富な標準 C++ ライブラリアルゴリズムと一緒にコレクションを使用できます。同時に、Tools.h++ がこれまで提供してきた安全で使い易いオブジェクト指向のインタフェースを継続して使用できます。
設計目標:内部操作性
他社のライブラリ、モジュール、クラス、アルゴリズムを、高いレベルで利用できるようにします。これは、標準 C++ ライブラリの主な利点の 1 つです。
例えば、標準 C++ ライブラリの list を使うときに、Tools.h++ の二重リンクリストを安全にしかも効果的に渡すことができます。
設計目標:自由性
標準 C++ ライブラリへのアクセスを保持します。
例えば、標準 C++ ライブラリコンテナとともに実装されている Tools.h++ コレクションを使用する場合、標準 C++ ライブラリの非オブジェクト指向の機能をいつでも利用できます。
設計目標:オブジェクト指向
標準 C++ ライブラリを効率的なオブジェクト指向のインタフェースで強化します。
新規および再設計されたすべてのコレクションクラスのテンプレートは、この目標に沿って作られています。それぞれのテンプレートは、対応する標準 C++ ライブラリコンテナを効果的に包含しており、使いなれたインタフェースがさらに拡張されたTools.h++ コレクションのインタフェースが利用できます。
設計目標: 単純性と安全性
リスクを減らしユーザがコードを簡単に管理できるように、標準 C++ ライブラリをさらに単純なインタフェースで強化しました。
オブジェクト指向のインタフェースを使って、この目標を達成しました。標準 C++ ライブラリとは異なり、Tools.h++ のコンテナメソッドは制御するデータを理解しているので、ユーザが反復子やアルゴリズムを指定する必要がありません。
設計目標:互換性
以前の Tools.h++ で書かれたコードを再利用できるようにしました。
例えば、Tools.h++ バージョン 6.1 のコレクションクラステンプレートを標準 C++ ライブラリコンテナをもとにするように再設計しました。ほとんどの場合、以前のバージョンのライブラリのクラスを使用した既存のソースコードは、変更を加えることなく、新しいライブラリでコンパイルできます。
設計目標: スムーズな移行
開発者が、それぞれの状況に応じて、いつでもスムーズに標準 C++ ライブラリに移行できるようにします。
例えば、Tools.h++ は、標準 C++ ライブラリがあるかないかにかかわらず使用できます。開発環境が Tools.h++ と共用できるバージョンの標準 C++ ライブラリに対応している場合は、標準 C++ ライブラリのコンテナクラスを使って実装されている 28 個の新規または再設計されたクラステンプレートを使用できます。標準 C++ ライブラリがない場合、前のバージョンのTools.h++ の技術を使って実装された、同じクラステンプレートへのサブセットインタフェースを使用できます。標準 C++ ライブラリがあるかどうかは、コンパイル時に自動的に判断されます。Tools.h++ のインタフェースは必要最小限に抑えられていますので、標準 C++ ライブラリに移行しても、ソースコードを修正する必要がありません。
1.3.2 あえて行わなかったことについて
Tools.h++の今後のバージョンでは、標準 C++ ライブラリおよび新しく付け加えられた C++ 言語の機能を完全にサポートする予定です。このバージョンでは、最新の技術をあえて組み入れなかった箇所がいくつかあります。例えば、標準ライブラリまたは言語の機能がより一般に受け入れられるまで待つことにした部分があります。また、新しい機能に対する経験をさらに積み、それをどのように効果的に全体に統合するかを検討するために待つことにした部分もあります。さらに、使い方が最適なパターンからはずれるものは提供しないようにしました。以下の部分については、特に留意してください。
RWCString と RWWString
Tools.h++は引き続きクラス RWCString と RWWString を使用します。しかし、この機能は標準 C++ ライブラリでは提供されていません。そのため、アプリケーションで C++ の標準 string と wstring を使用できますが、Tools.h++ と標準文字列間で変換しなければならない場合、コピーする手間がかかることがあります。
RWLocale
Tools.h++ は引き続き、クラス RWLocale を使用します。今回のリリース時には、C++ の標準 locale クラスの仕様はまだ ANSI/ISO 規格協会が検討中の段階にあります。
例外階層
Tools.h++ は引き続き独自の例外階層を使用します。これは、草案の C++ 規格における例外階層に似ています。標準の例外階層が一般に受け入れられるまで、これを変更する予定はありません。アプリケーションでは標準の例外を使用できますが、独自の try ブロックの中から Tools.h++ ライブラリを呼び出すときに、Tools.h++ の例外も受け取るようにする必要があります。
名前空間
Tools.h++ では、現在の草案で定義されている名前空間はまだ使用できません。今のところ、引き続き RW 接頭辞を使ってグローバル名前空間内で独自のクラスを区別します。当然、ユーザ独自のアプリケーションでは、コンパイラがサポートするかぎり名前空間を使うことができます。