インテル(R) 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() 関数が共存することができます。
icpc -export -export_dir /usr2/export/ -c file1.cpp
icpc -export -export_dir /usr2/export/ -c file2.cpp
icpc -export -export_dir /usr2/export/ file1.o file2.o