C++ テンプレートの使用

C++ では、テンプレートを使用して次の関連項目のセットを宣言することができます。

アプリケーション内では、同じテンプレートのインスタンスを複数回生成することができます。その場合の引き数は、同じであっても異なっていてもかまいません。同じ引き数を使用する場合は、繰り返されるインスタンス生成は冗長になります。これらの冗長なインスタンス生成は、コンパイル時間や実行可能プログラムのサイズの増大につながり、何のメリットもありません。

冗長なインスタンス生成の問題に対処するには、基本的に次の 4 つの方法があります。

固有のインスタンス生成のためのコーディングを行う
ソース・コードを、オブジェクト・ファイルに必要なインスタンス生成ごとにインスタンスが 1 つだけ含まれ、未使用のインスタンス生成が含まれないように編成します。この方法は、最も使用頻度の低いものです。この方法をとるには、個々のテンプレートがどこで定義され、個々のテンプレート・インスタンス生成がどこで必要になるかを知っている必要があるためです。

出現するたびにインスタンスを生成する
-qnotempinc および -qnotemplateregistry コンパイラー・オプションを使用します (これらはデフォルト設定です)。すると、コンパイラーは、インスタンス生成が必要になるたびにそのためのコードを生成します。この方法では、冗長なインスタンス生成の欠点は改善されません。

コンパイラーに、生成したインスタンスをテンプレート・インクルード・ディレクトリーに保管するよう指示する
-qtempinc コンパイラー・オプションを使用します。テンプレート定義ファイルとテンプレート・インプリメンテーション・ファイルの構造が所定のものである場合は、テンプレートで生成された個々のインスタンスはテンプレート・インクルード・ディレクトリーに保管されます。コンパイラーは、同じテンプレートのインスタンスを同じ引き数で再び生成するように要求されると、新たに生成する代わりに保管したバージョンを使用します。この方法については、 -qtempinc コンパイラー・オプションの使用で説明します。

コンパイラーに、インスタンス生成情報をレジストリーに保管するよう指示する
-qtemplateregistry コンパイラー・オプションを使用します。テンプレートによる個々のインスタンス生成に関する情報が、テンプレート・レジストリーに保管されます。コンパイラーは、同じテンプレートのインスタンスを同じ引き数で再び生成するように要求されると、新たに生成する代わりに、最初のオブジェクト・ファイルにあるインスタンス生成をポイントします。 -qtemplateregistry コンパイラー・オプションには、 -qtempinc コンパイラー・オプションと同様の利点がありますが、テンプレート定義ファイルおよびテンプレート・インプリメンテーション・ファイルのための特定の構造は必要ありません。この方法については、 -qtemplateregistry コンパイラー・オプションの使用で説明します。
注:
-qtempinc コンパイラー・オプションと -qtemplateregistry コンパイラー・オプションは、同時に使用することはできません。
IBM Copyright 2003