表示: Delphi
C++
表示設定
明示的および暗黙のテンプレート関数
提供:RAD Studio XE2
関数テンプレートの概要:インデックス への移動
コンパイラが暗黙に生成したテンプレート関数は,完全に一致するものを見つけるオーバーロードの解決では無視されます。
template<class T> T max(T a, T b){ return (a > b) ? a : b; } void f(int i, char c) { max(i, i); // max(int,int) を呼び出す max(c, c); // max(char,char) を呼び出す max(i, c); // max(int,char) は一致しない max(c, i); // max(char,int) は一致しない }
このコードは次のエラーメッセージを発生させます。
【Could not find a match for 'max(int, char) ' in function f(int, char)】 ('max(int, char) ' に一致するものが見つからない) 【Could not find a match for 'max(char, int) ' in function f(int, char)】 ('max(char, int) ' に一致するものが見つからない) 【Could not find a match for 'max(char, int) ' in function f(int, char)】 ('max(char, int) ' に一致するものが見つからない)
一方,テンプレート関数を明示的に宣言しておくと,この関数のオーバーロードは完全に解決されます。詳細については,明示的テンプレート関数の例を参照してください。
テンプレート関数の引数と正確に一致するものを検索するときは,意味のない変換でも正確に一致するように考慮します。詳細については,意味のない変換の例を参照してください。
派生クラスポインタまたは参照引数を伴うテンプレート関数は,そのパブリック基本クラスと一致してもかまいません。詳細については,基本クラス参照の例を参照してください。