関数テンプレートとクラステンプレートの構文
■関数テンプレート(Tはプレースホルダ)
template <Class T>T 関数名(T 引数名){
Tをデータ型とした変数を使った処理;
}
template <class T1,class T1> T1 関数名(T1 引数名,T2 引数名){
T1,T2をデータ型とした変数を使った処理;
}
■クラステンプレート(Tはプレースホルダ)
template <class Ty class クラス名{
private:
T メンバ変数名;
public:
Tメンバ関数名(T 引数名){
Tをデータ型とした変数を使った処理;
}
}
list10_3.cpp
#include <iostream>
using namespace std;
// 関数テンプレートで定義したgetMin関数
//template <class T> T 関数名(T 引数名)
template <class T> T getMin(T a, T b) {
//return a < b ? a : b;
if (a < b) {
return a;
} else {
return b;
}
}
//テンプレートをオーバーロード
// 関数テンプレートで定義したgetMin関数(配列の要素の最小値を返す)
//template <class T1,class T1> T1 関数名(T1 引数名,T2 引数名)
template <class T1, class T2> T1 getMin(T1 a[], T2 length) {
T1 ans = a[0];
for (T2 i = 1; i < length; i++) {
if (ans > a[i]) {
ans = a[i];
}
}
return ans;
}
// main関数
int main() {
// int型のgetMin関数を呼び出す
int a, b, c;
a = 123;
b = 456;
c = getMin(a, b);
cout << c << endl;
// double型のgetMin関数を呼び出す
double x, y, z;
x = 1.23;
y = 4.56;
z = getMin(x, y);
cout << z << endl;
// char型のgetMin関数(配列用)を呼び出す
char cArray[] = { 'c', 'b', 'f', 'a', 'e' };
int cLength = 5;
char cAns = getMin(cArray, cLength);
cout << cAns << endl;
// float型のgetMin関数(配列用)を呼び出す
float fArray[] = { 2.22F, 3.33F, 1.11F, 5.55F, 4.44F };
int fLength = 5;
float fAns = getMin(fArray, fLength);
cout << fAns << endl;
return 0;
}
cd_samples10_3_template.cmd
C:\samples\chapter10>cd C:\samples\chapter10\
C:\samples\chapter10>g++ -o list10_3.exe list10_3.cpp
C:\samples\chapter10>list10_3.exe
123
1.23
a
1.11
C:\samples\chapter10>cmd /k
C:\samples\chapter10>