テンプレート関数のオーバーライド
関数テンプレートの概要:インデックス への移動
前述した例は関数テンプレートまたは汎用関数と呼ばれます。関数テンプレートから構築した特定のインスタンスはテンプレート関数と呼ばれます。テンプレート関数は,関数のアドレスを受け取ったとき,または定義済みの(汎用でない)データ型で関数を呼び出したときに生成されます。特定の型に対して非テンプレート関数を定義することにより,テンプレート関数の生成を無効にすることができます。
#include <string.h>
char *max(char *x, char *y){
return(strcmp(x,y) > 0) ? x : y;
}
max 関数を文字列引数で呼び出すと,自動生成のテンプレート関数ではなくこの関数が実行されます。ここでは,この関数を呼び出すことにより,無意味なポインタの比較を避けることができます。
コンパイラが生成するテンプレート関数では,意味のない引数の変換が行われるだけです。
テンプレート関数の引数型ではテンプレート仮引数をすべて使う必要があります。関数を呼び出したとき,未使用のテンプレート引数の実際の値は引き出せないためです。