明示的なインスタンス化はコードで使用する実際にはなくテンプレート クラスのインスタンスを作成することもできます。分布のテンプレートを使用するライブラリ (.lib) ファイルを作成する場合はこの方法が有効であるためインスタンスはテンプレート定義オブジェクト (.obj) ファイルに送信されません。
次に明示的に int の変数および 6 の項目の MyStack をインスタンス化しています :
template class MyStack<int, 6>;
このステートメントはオブジェクトの領域を確保するに MyStack のインスタンスを作成します ; 生成されるすべてのメンバーにコードします。
次に明示的にコンストラクターのメンバー関数のみをインスタンス化しています :
template MyStack<int, 6>::MyStack( void );
関数テンプレートは 関数テンプレートのインスタンス化 の例に示すように特定の型引数で redeclaring によって明示的にインスタンス化できます。
Microsoft 固有の仕様 →
メンバーの自動インスタンス化できないように extern のキーワードを使用します。次に例を示します。
extern template class MyStack<int, 6>;
次のように外部同様にインスタンス化されていないとして特定のメンバーを指定するには :
extern template MyStack<int, 6>::MyStack( void );
[!メモ]
特化された形式の extern のキーワードがクラス本体の外部で定義されているメンバー関数だけです。クラス宣言の中で定義されている関数をインライン関数と見なされ常にインスタンス化されます。