-1

型に対して関数テンプレートの明示的なインスタンス化を使用するのはなぜですか? 関数の明示的なインスタンス化を使用しない場合、必要な関数を作成するためにテンプレートが使用されますが、明示的なインスタンス化の使用は何ですか?

template <class Any>
void Swap (Any &, Any &);
// template prototype

template <> void Swap<job>(job &, job &);
// explicit specialization for job

int main(void)
{

template void Swap<char>(char &, char &); 
// explicit instantiation for char

short a, b;
Swap(a,b);
// implicit template instantiation for short

job n, m;
Swap(n, m);
// use explicit specialization for job

char g, h;
Swap(g, h);
// use explicit template instantiation for char

}

上記の例では。明示的なインスタンス化は char 型に対して行われます。これの用途は何ですか?? コンパイラがテンプレートを使用して char 型の fn を作成できる場合。

私のコンセプトを明確にするのに役立つ参考文献がある場合は、それらを含めてください。

4

1 に答える 1

1

テンプレートの定義は、それをインスタンス化する各翻訳単位で使用できる必要があります。通常、これはヘッダーでテンプレートを定義することによって実現されます。しかし、状況によっては、それをしたくない場合もあります。おそらく、クライアントに実装のソースを見せたくないでしょう。

代わりに、ヘッダーでテンプレートを宣言できます。次にそれを定義し、必要なすべての特殊化をソース ファイルで明示的にインスタンス化します。

于 2013-03-01T13:47:52.710 に答える