テンプレートのインスタンス生成

コンパイラは、すべてのテンプレートのインスタンス生成を自動的に行い、各テンプレートエンティティの定義がリンク後に 1 つしか残らないようにします。コンパイラは、名前の付いた共通セクションにテンプレートエンティティを生成することでこの処理を行います。したがって、重複するすべての共通セクション、つまり同じ名前の共通セクションがリンカによって削除されます。

Note

--pending_instantiations コンパイラオプションを指定して、特定のテンプレートに対して同時に生成されるインスタンス数を制限できます。

‑‑pending_instantiations=nも参照して下さい。

Show/hide暗黙のインクルード

暗黙のインクルードがイネーブルになっているとき、.h ファイルで宣言されたテンプレートエンティティのインスタンス生成のために定義が必要な場合は、コンパイラは対応する .cc ファイルを暗黙にインクルードして、その定義のソースコードを取得できるものと見なします。例えば、テンプレートエンティティ ABC::fxyz.h ファイルで宣言され、コンパイル中に ABC::f のインスタンス生成が必要な場合でも、コンパイルで処理中のソースコードに ABC::f の定義が含まれていなければ、コンパイラは xyz.cc ファイルが存在するかどうかをチェックします。ファイルが存在している場合、コンパイラはこのファイルがメインソースファイルの最後にインクルードされているかのように処理します。

コンパイラが特定のテンプレートエンティティのテンプレート定義ファイルを検索するには、テンプレートが宣言されているファイルの完全パス名と、そのファイルが、例えば #include <file.h> などのシステムインクルード構文を使用してインクルードされたかどうかを把握する必要があります。#line ディレクティブを含む前処理されたソースでは、この情報を使用できません。そのため、コンパイラは #line ディレクティブを含むソースコードでは暗黙のインクルードを試みません。

コンパイラは、定義ファイルの接尾文字 .cc.CC を探します。

コマンドラインオプション --implicit_include および --no_implicit_include を指定して、暗黙のインクルードモードを有効または無効にできます。

暗黙のインクルードは、ファイルの通常のコンパイル中、つまり -E コマンドラインオプションを使用していない場合のみ実行されます。

詳細については、コマンドラインオプションを参照して下さい。

Copyright © 2010 ARM. All rights reserved.ARM DUI 0491BJ
Non-ConfidentialID011811