関数テンプレート
#include <stdio.h> template<class TYPE> void Swap(TYPE& a, TYPE& b) { TYPE tmp = a; a = b; b = tmp; } int main() { int n1 = 5, n2 = 7; Swap(n1, n2); printf("交換後:(n2, ,2) = (%d, %d)\n", n1, n2); float f1 = 5.5, f2 = 7.5; Swap(f1, f2); printf("交換後:(f1, f2) = (%f, %f)\n", f1, f2); return 0; }
実行結果 交換後:(n2, ,2) = (7, 5) 交換後:(f1, f2) = (7.500000, 5.500000)
複数の引数を持つ関数テンプレートを定義することも可能だ。
T1, T2という二つの方の引数をとり、戻り値がT3である関数の宣言は
template<class T1, class T2, class T3> T3 func(T1, a, T2, b);
となる。
注意すべきことは、テンプレート引数と実際に与える型が完全に一致している必要があることだ。
template<class TYPE> void Func(TYPE f1, TYPE f2);
と宣言したテンプレート関数を
int n = 5; float f = 7.0; Func(n, f);
のように呼び出すと、コンパイル・エラーになってしまう。