関数テンプレート

#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);

のように呼び出すと、コンパイル・エラーになってしまう。