関数テンプレート: 部分特殊化とオーバーロード
C では、関数テンプレートの部分特殊化は言語標準によって許可されていません。ただし、特定のコンパイラはそれを可能にする拡張機能を提供する場合があります。
部分特殊化の定義
部分特殊化には、元のテンプレートよりも特殊なテンプレート引数のセットを使用してテンプレートを定義することが含まれます。 。クラス テンプレートの場合、これは、テンプレート パラメーターの一部またはすべてに特定の値を指定することを意味します。
例: 部分的な特殊化とオーバーロード
提供されたコードは、部分的なものではなく、オーバーロードを示しています。専門化。次の関数が定義されています:
template<typename T1, typename T2> inline T1 max(T1 const& a, T2 const& b) { return a < b ? b : a; } template<typename T> inline T const& max(T const& a, T const& b) { return 10; }
2 番目の関数のテンプレート パラメーターは型が同じですが、部分的な特殊化ではありません。これは、最初の関数をオーバーロードする別の関数です。
関数テンプレートの特殊化
関数テンプレートの完全な特殊化は許可されます。これには、すべてのテンプレート パラメーターを明示的に指定してテンプレートを定義することが含まれます。ただし、C 標準では直接サポートされておらず、一部のコンパイラで拡張機能としてのみ実装されています。
Partial Specialization Compiler Extensions
Microsoft Visual Studio 2010 Express の場合、コンパイラ拡張機能により、クラスと関数テンプレートの両方の部分的な特殊化が可能になります。これは標準の動作ではないため、移植性の問題が発生する可能性があります。
以上がC 関数テンプレート: オーバーロードと (非標準) 部分特殊化?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。