インテル® C++ コンパイラは、次のオプションでエクスポートされるテンプレートをサポートします:
オプション | 説明 |
---|---|
-export | エクスポートされるテンプレートの認識を有効にします。C++ モードでのみサポートされています。 |
-export_dir dir | エクスポートされるテンプレートの検索パスのディレクトリ名を指定します。ディレクトリは、エクスポートされるテンプレートの定義を検索するのに使用され、コマンドラインで指定した順序で検索されます。カレント・ディレクトリは、常に最初に検索されます。 |
エクスポートされるテンプレートとは、export キーワードで宣言されたテンプレートです。クラス・テンプレートをエクスポートすることは、各スタティック・データ・メンバと非インライン・メンバ関数をエクスポートするのと同じことです。エクスポートされるテンプレートは固有です。つまり、テンプレートの定義は、そのテンプレートを使用する変換単位内で記述する必要はありません。例えば、次の C++ プログラムは 2 つの別々の変換単位で構成されています:
// file1.cpp #include <stdio.h> static void trace() { printf("File 1\n"); } export template<class T> T const& min(T const&, T const&); int main() { trace(); return min(2, 3); }
// file2.cpp #include <stdio.h> static void trace() { printf("File 2\n"); } export template<class T> T const& min(T const &a, T const &b) { trace(); return a<b?a: b; } |
これらの 2 つのファイルは、別々の変換単位であるため、それぞれ独立しています。これにより、内部リンケージで 2 つの trace() 関数が共存することができます。
prompt>icpc -export -export_dir /usr2/export/ -c file1.cpp
prompt>icpc -export -export_dir /usr2/export/ -c file2.cpp
prompt>icpc -export -export_dir /usr2/export/ file1.o file2.o