インテル® C++ コンパイラーは、次のオプションでエクスポート・テンプレートをサポートしています。
オプション |
説明 |
---|---|
-export |
エクスポート・テンプレートの認識を有効にします。C++ モードでのみサポートされています。 |
-export-dir dir |
エクスポート・テンプレートの検索パスのディレクトリー名を指定します。ディレクトリーは、エクスポート・テンプレートの定義を検索するのに使用され、コマンドラインで指定した順序で検索されます。カレント・ディレクトリーは、常に最初に検索されます。 |
gcc 3.3 以前ではエクスポート・テンプレートはサポートされていません。この機能を使用するには、gcc 3.4 以上が必要です。
エクスポート・テンプレートとは、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() 関数が共存することができます。