訂房網(wǎng)站開(kāi)發(fā)長(zhǎng)春網(wǎng)站建設(shè)推廣
一、函數(shù)模板
1.1 概念
函數(shù)模板代表了一個(gè)函數(shù)家族,該函數(shù)模板與類型無(wú)關(guān),在使用時(shí)被參數(shù)化,根據(jù)實(shí)參類型產(chǎn)生函數(shù)的特定類型版本。
格式: template <typename T>
或template <class T>
template <class T>
void Swap(T& a, T& b)
{T tmp = a;a = b;b = tmp;
}int main()
{int a = 1, b = 2;double d1 = 1.2, d2 = 2.1;Swap(a, b);Swap(d1, d2);return 0;
}
1.2 函數(shù)模板的原理
在編譯階段,編譯器需要根據(jù)傳入實(shí)參的類型推演生成對(duì)應(yīng)類型的函數(shù)。
1.3 函數(shù)模板的實(shí)例化
用不同類型的參數(shù)使用函數(shù)模板時(shí),稱為函數(shù)模板的實(shí)例化。
1. 隱式實(shí)例化:編譯器根據(jù)傳入實(shí)參的類型推演生成對(duì)應(yīng)類型的函數(shù)
如上:Swap()
。
template <class T>
T Add(const T x, const T y)
{return x + y;
}int main()
{int a1 = 1;double d1 = 2.0;// error// Add(a1, d1); // 1. Add(a1, (int)d1); 2. 顯式實(shí)例化return 0;
}
2. 顯式實(shí)例化:在函數(shù)名后的<>
中指定函數(shù)模板的參數(shù)類型
template <class T>
T Add(const T x, const T y)
{return x + y;
}int main()
{int a1 = 1;double d1 = 2.0;Add <double>(a1, d1);// 顯式實(shí)例化return 0;
}
二、類模板
2.1 類模板格式
template <class T1, class T2, ..., class Tn>
class 類模板名
{// 類成員定義
};
E.g.
template <class T1>
// typedef int STDateType class Stack// Stack不是具體的類,是編譯器根據(jù)被實(shí)例化的類型生成的具體類的模具
{
public:Stack(int capacity = 3):_top(0), _capacity(capacity){cout << "Stack(int capacity = 3)" << endl;// _a = new STDateType[capacity];_a = new T1[capacity];}~Stack(){cout << "~Stack()" << endl;delete _a;_top = _capacity = 0;}
private:// STDateType* _a;T1* _a;int _top;int _capacity;
};