【C++】認識テンプレート関数
テンプレートは汎用プログラミングの基礎です.汎用プログラミングとは,タイプに関係のない論理コードを記述することであり,多重化の方式である.テンプレートは、テンプレート関数とテンプレートクラスに分けられます.
まず,2つの数が等しいかどうかを比較するために用いられるテンプレート関数を用いない.
このように直接実装すると、両者の異なるタイプは2回実装されますが、このようなコードの類似度は高く、冗長なコードはコンパイラのメンテナンスが容易ではありません.
次に、このような問題を回避するために、テンプレート関数を見てみましょう.
まず,2つの数が等しいかどうかを比較するために用いられるテンプレート関数を用いない.
bool IsEqual(int left, int right)//--->int
{
return left == right;
}
bool IsEqual(const string& left, const string& right)//-->string
{
return left == right;
}
このように直接実装すると、両者の異なるタイプは2回実装されますが、このようなコードの類似度は高く、冗長なコードはコンパイラのメンテナンスが容易ではありません.
次に、このような問題を回避するために、テンプレート関数を見てみましょう.
#include<iostream>
using namespace std;
#include<string>
template <class T>
bool IsEqual(const T& left, const T& right)
{
return left == right;
}
template<class T1,class T2>
bool IsEqual(const T1& left,const T2& right)
{
return left == right;
}
bool IsEqual(const string& left, const string& right)
{
return left == right;
}
void Test()
{
string s1("s1");
string s2("s2");
cout << IsEqual(s1, s2) << endl;
cout << IsEqual(1, 1) << endl;
cout << IsEqual<int>(1, 1.2) << endl;
cout << IsEqual<double>(1, 1.2) << endl;
}