テンプレート関数の明示的なインスタンス化
C では、テンプレート関数は、さまざまな型で動作できる操作を定義する方法を提供します。場合によっては、テンプレート関数を直接呼び出さずに明示的にインスタンス化することが必要になることがあります。これは、コンパイラがテンプレート引数を自動的に推論できない状況で役立ちます。
次の例を考えてみましょう。
template <class T> int function_name(T a);
この関数を整数に対して明示的にインスタンス化するには、次のように記述してみるとよいでしょう。
template int function_name<int>(int);
ただし、このアプローチでは次のような結果になります。エラー:
error: expected primary-expression before 'template' error: expected `;' before 'template'
関数を正しく明示的にインスタンス化するには、次の構文を使用します:
template <typename T> void func(T param); // definition template void func<int>(int); // explicit instantiation
このコードは特殊化ではなく、明示的にインスタンス化を実行することに注意することが重要です。特殊化の構文は少し異なります。
template <typename T> void func(T param); // definition template <> void func<int>(int); // specialization
明示的なインスタンス化により、インスタンス化されたテンプレート関数のコードがコンパイラによって生成され、適切な関数でテンプレート関数を直接呼び出さなくてもコードを使用できるようになります。型引数。
以上がC でテンプレート関数を明示的にインスタンス化するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。