【C++】認識テンプレート関数


テンプレートは汎用プログラミングの基礎です.汎用プログラミングとは,タイプに関係のない論理コードを記述することであり,多重化の方式である.テンプレートは、テンプレート関数とテンプレートクラスに分けられます.
まず,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;
}