私が持っている場合:
template <typename T>
bool name (std::string);
template <> bool name<int>(std::string);
完全に特殊化された機能と他の通常の機能の違いは何ですか。
たとえば、ヘッダーには、これらの宣言とテンプレート定義が必要です。それでも、他のすべての通常の関数に沿って、ソースファイルに特殊な定義を含めることができます。それらは同じですか?
inline
ヘッダーのように特殊なテンプレートを定義するよりも、それは良い習慣ですか?
関数テンプレートの特殊化は、テンプレート自体がオーバーロード解決(特殊化の定義ではなく署名を使用する)によって選択された場合の呼び出しの効果を決定します。これは、特殊化が暗黙的または明示的に生成されているかどうかに関係なく当てはまります。
別の関数はそれ自体で過負荷の解決に参加し、テンプレートの引数の推定によって簡単に相殺できるわずかな利点で関数テンプレートと競合します(ただし、ここではT
推定できないため)。明示的なテンプレート引数リストを使用することで完全に除外できます(すべてのテンプレート引数を推測できる場合は空のリストでも)。つまり、テンプレートにはすべてのタイプに対して適切な定義を与える必要があります(一部が削除されているかどうかは不明です)。コンパイル)。
に関してはinline
、懸念事項は他の関数の懸念事項と同じです。ヘッダーに定義を提供することは、最適化にとって重要であり、ヘッダーのみのライブラリを許可し、テキストの繰り返しを減らし、または単にコードを変更しにくくする緊密な結合を生成します。 。通常、プライマリテンプレートの定義はヘッダーに含まれている必要があるため、スペシャライゼーションの定義もヘッダーに配置する傾向がある可能性があります。いつものように、アプリケーションと判断の知識が必要です。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加