テンプレートの生成基準
BCC32 および BCCOSX コンパイラは、テンプレート インスタンス用の次のメソッドを生成します:
- 実際に使用されるメソッド
- インスタンスの仮想メソッド
- 明示的にインスタンス化されたクラスのすべてのメソッド
この動作の利点は、テンプレートの使用頻度によっては、最終的にオブジェクト ファイル、ライブラリ、実行可能ファイルが大幅に小さくなることです。
任意で、-J スイッチを使用して、すべてのメソッドを生成することができます(「テンプレート用コンパイラ スイッチ」と「C++ コンパイラ」を参照)。
また、ISO/ANSI C++ 標準に規定されている明示的なテンプレート インスタンス化の構文を使って、テンプレート インスタンスのすべての非インライン メソッドを強制的に生成することもできます。 構文は次のとおりです:
template class classname<template parameter>;
次のような STL(標準テンプレート ライブラリ)の例では、ユーザーのコードで参照されるかどうかに関係なく、list<char> クラスのすべての非インライン メソッドを生成するようにコンパイラに指示します。
template class list<char>
また、以下のように、テンプレート クラスの単一のメソッドまたは単一の静的データ メンバを明示的にインスタンス化することもできます。つまり、そのメソッドは、たとえ使用されなくても、.OBJ ファイルに生成されるということです。
template void classname <template parameter>:: methodname ();