11.9 ARM C++ でのテンプレートのインスタンス化

コンパイラは、すべてのテンプレートのインスタンス化を自動的に行い、各テンプレートエンティティの定義がリンク後に 1 つしか残らないようにします。

コンパイラは、名前の付いた共通セクションにテンプレートエンティティを生成することでこの処理を行います。したがって、重複するすべての共通セクション、つまり同じ名前の共通セクションがリンカによって削除されます。

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

暗黙のインクルード

暗黙のインクルードがイネーブルになっているとき、.h ファイルで宣言されたテンプレートエンティティのインスタンス生成のために定義が必要な場合は、コンパイラは対応する .cc ファイルを暗黙にインクルードして、その定義のソースコードを取得できるものと見なします。たとえば、テンプレートエンティティ ABC::fxyz.h ファイルで宣言され、コンパイル中に ABC::f のインスタンス生成が必要な場合でも、コンパイルで処理中のソースコードに ABC::f の定義が含まれていなければ、コンパイラは xyz.cc ファイルが存在するかどうかをチェックします。ファイルが存在している場合、コンパイラはこのファイルがメインソースファイルの最後にインクルードされているかのように処理します。
コンパイラが特定のテンプレートエンティティのテンプレート定義ファイルを検索するには、テンプレートが宣言されているファイルの完全パス名と、そのファイルが、たとえば #include <file.h> などのシステムインクルード構文を使用してインクルードされたかどうかを把握する必要があります。#line ディレクティブを含む前処理されたソースでは、この情報を使用できません。そのため、コンパイラは #line ディレクティブを含むソースコードでは暗黙のインクルードを試みません。
コンパイラは、定義ファイルの接尾文字 .cc.CC を探します。
コマンドラインオプション --implicit_include および --no_implicit_include を指定して、暗黙のインクルードモードを有効または無効にできます。
暗黙のインクルードは、ファイルの通常のコンパイル中、つまり -E コマンドラインオプションを使用していない場合のみ実行されます。
非機密扱いPDF file icon PDF 版ARM DUI0472LJ
Copyright © 2010-2015 ARM.All rights reserved.