関数テンプレートの部分特殊化が可能であると思われる理由
関数テンプレートの部分特殊化は、C でサポートされている機能であるとよく誤解されます。ただし、C 標準に従って、これは許可されていません。
同じパラメータ タイプを持つ 2 つのテンプレートが存在するため、提供されたコードは関数テンプレートの部分的な特殊化を示しているように見えます:
template <typename T> inline T const& max(T const& a, T const& b) { return 10; }
詳しく調べると、コードが実際に最大
// Not allowed by the standard! template <typename T> inline T const& max<T,T>(T const& a, T const& b) { return a; // Any value of type T }
オーバーロードと部分特殊化
オーバーロードを使用すると、複数の関数が同じ名前を共有できますが、パラメーターは異なります。部分的な特殊化では、特定のテンプレートの関数テンプレートの特殊なバージョンが作成されます。
結論
場合によっては関数テンプレートの部分的な特殊化がサポートされているように見えるかもしれませんが、それは関数テンプレートの機能ではないことを覚えておくことが重要です。 C規格。オーバーロードは同様の機能を実現する有効な手法ですが、真の部分特殊化の柔軟性と型安全性が欠けています。
以上が関数テンプレートの部分特殊化は実際に C で可能ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。