完全に特殊化されたテンプレート関数は通常の関数と同じですか?

ダニエル・デュケ

私が持っている場合:

template <typename T>
bool name (std::string);

template <> bool name<int>(std::string);

完全に特殊化された機能と他の通常の機能の違いは何ですか。

たとえば、ヘッダーには、これらの宣言とテンプレート定義が必要です。それでも、他のすべての通常の関数に沿って、ソースファイルに特殊な定義を含めることができます。それらは同じですか?

inlineヘッダーのよう特殊なテンプレートを定義するよりも、それは良い習慣ですか?

デイビスヘリング

関数テンプレートの特殊化、テンプレート自体がオーバーロード解決(特殊化の定義ではなく署名を使用する)によって選択された場合の呼び出し効果決定しますこれは、特殊化が暗黙的または明示的に生成されているかどうかに関係なく当てはまります。

別の関数はそれ自体で過負荷の解決に参加し、テンプレートの引数の推定によって簡単に相殺できるわずかな利点で関数テンプレートと競合します(ただし、ここではT推定できないため)。明示的なテンプレート引数リストを使用することで完全に除外できます(すべてのテンプレート引数を推測できる場合は空のリストでも)。つまり、テンプレートにはすべてのタイプに対して適切な定義を与える必要があります(一部が削除されているかどうかは不明です)。コンパイル)。

に関してはinline、懸念事項は他の関数の懸念事項と同じです。ヘッダーに定義を提供することは、最適化にとって重要であり、ヘッダーのみのライブラリを許可し、テキストの繰り返しを減らし、または単にコードを変更しにくくする緊密な結合を生成します。 。通常、プライマリテンプレートの定義はヘッダーに含まれている必要があるため、スペシャライゼーションの定義もヘッダーに配置する傾向がある可能性があります。いつものように、アプリケーションと判断の知識が必要です。

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

同じテンプレート関数で複数のタイプを特殊化するにはどうすればよいですか?

分類Dev

完全に特殊化されたクラステンプレート用の関数テンプレートの明示的な特殊化

分類Dev

完全に特殊化されたテンプレートクラスの定義の外でテンプレートメンバー関数を定義するにはどうすればよいですか?

分類Dev

完全に特殊化されたテンプレートクラスの定義の外でテンプレートメンバー関数を定義するにはどうすればよいですか?

分類Dev

関数テンプレートの特殊化は本当に許可されていますか?

分類Dev

関数テンプレートの特殊化を減らすにはどうすればよいですか?

分類Dev

関数テンプレート(クラステンプレートのメンバー)を明示的に特殊化すると、「部分的な特殊化は許可されていません」というエラーが発生します。なぜですか?

分類Dev

異なるタイプを返すように設計されたテンプレート関数をどのように特殊化できますか?

分類Dev

テンプレート化された引数のない関数テンプレートの特殊化

分類Dev

テンプレートの戻り値に対するテンプレート関数の完全な特殊化

分類Dev

SFINAEを使用したC ++ 11テンプレート関数の特殊化により、さらに特殊化できます(エラー:オーバーロードされた関数の呼び出しがあいまいです)

分類Dev

テンプレート化されたtypenameを使用した関数テンプレートの特殊化

分類Dev

関数テンプレートの明示的な特殊化で複数のテンプレート引数を差し引くことはできますか?

分類Dev

テンプレート化された関数テンプレートの特殊化

分類Dev

明示的に特殊化された関数テンプレートタイプの推定

分類Dev

C ++が完全な特殊化によってマスクされている基本テンプレート関数をインスタンス化するのはなぜですか?

分類Dev

デシリアライザーのポップ関数のテンプレート化された特殊化に関するあいまいさ

分類Dev

関数テンプレートの特殊化がVS2015ではなくVS2017で拒否されるのはなぜですか?

分類Dev

クラスと関数テンプレートの特殊化

分類Dev

テンプレートクラス(すでに指定されている)でテンプレートメンバー関数を特殊化する方法は?

分類Dev

テンプレート化された関数を特殊化して、引数の型がポインターである場合とそうでない場合を区別する方法はありますか?

分類Dev

この関数テンプレートの特殊化がコンパイルされないのはなぜですか?

分類Dev

テンプレート化された引数を持つ部分的な特殊化関数テンプレート

分類Dev

明示的な特殊化「...」は、関数テンプレートの特殊化ではありません

分類Dev

テンプレート化された関数を別の関数のテンプレート引数にすることはできますか?

分類Dev

テンプレート化されたクラスのメンバー関数の特殊化

分類Dev

C ++関数テンプレートの特殊化はどのように機能しますか?

分類Dev

テンプレート化されたクラスの基本クラスに基づいてメンバー関数を特殊化するにはどうすればよいですか

分類Dev

別の名前空間内から関数テンプレートを明示的に特殊化する方法は?

Related 関連記事

  1. 1

    同じテンプレート関数で複数のタイプを特殊化するにはどうすればよいですか?

  2. 2

    完全に特殊化されたクラステンプレート用の関数テンプレートの明示的な特殊化

  3. 3

    完全に特殊化されたテンプレートクラスの定義の外でテンプレートメンバー関数を定義するにはどうすればよいですか?

  4. 4

    完全に特殊化されたテンプレートクラスの定義の外でテンプレートメンバー関数を定義するにはどうすればよいですか?

  5. 5

    関数テンプレートの特殊化は本当に許可されていますか?

  6. 6

    関数テンプレートの特殊化を減らすにはどうすればよいですか?

  7. 7

    関数テンプレート(クラステンプレートのメンバー)を明示的に特殊化すると、「部分的な特殊化は許可されていません」というエラーが発生します。なぜですか?

  8. 8

    異なるタイプを返すように設計されたテンプレート関数をどのように特殊化できますか?

  9. 9

    テンプレート化された引数のない関数テンプレートの特殊化

  10. 10

    テンプレートの戻り値に対するテンプレート関数の完全な特殊化

  11. 11

    SFINAEを使用したC ++ 11テンプレート関数の特殊化により、さらに特殊化できます(エラー:オーバーロードされた関数の呼び出しがあいまいです)

  12. 12

    テンプレート化されたtypenameを使用した関数テンプレートの特殊化

  13. 13

    関数テンプレートの明示的な特殊化で複数のテンプレート引数を差し引くことはできますか?

  14. 14

    テンプレート化された関数テンプレートの特殊化

  15. 15

    明示的に特殊化された関数テンプレートタイプの推定

  16. 16

    C ++が完全な特殊化によってマスクされている基本テンプレート関数をインスタンス化するのはなぜですか?

  17. 17

    デシリアライザーのポップ関数のテンプレート化された特殊化に関するあいまいさ

  18. 18

    関数テンプレートの特殊化がVS2015ではなくVS2017で拒否されるのはなぜですか?

  19. 19

    クラスと関数テンプレートの特殊化

  20. 20

    テンプレートクラス(すでに指定されている)でテンプレートメンバー関数を特殊化する方法は?

  21. 21

    テンプレート化された関数を特殊化して、引数の型がポインターである場合とそうでない場合を区別する方法はありますか?

  22. 22

    この関数テンプレートの特殊化がコンパイルされないのはなぜですか?

  23. 23

    テンプレート化された引数を持つ部分的な特殊化関数テンプレート

  24. 24

    明示的な特殊化「...」は、関数テンプレートの特殊化ではありません

  25. 25

    テンプレート化された関数を別の関数のテンプレート引数にすることはできますか?

  26. 26

    テンプレート化されたクラスのメンバー関数の特殊化

  27. 27

    C ++関数テンプレートの特殊化はどのように機能しますか?

  28. 28

    テンプレート化されたクラスの基本クラスに基づいてメンバー関数を特殊化するにはどうすればよいですか

  29. 29

    別の名前空間内から関数テンプレートを明示的に特殊化する方法は?

ホットタグ

アーカイブ