1.模板參數加入一個變量
一般只能是int,double要看c++的版本,在最新的版本下是支持double模板參數的。
2.適配器的使用
template <class T,class container=deque<T>>
class stack {
public:void push_back(const T& x) {_con.push_back(x);}void pop() {_con.pop_back();}size_t size() {return _con.size();}bool empty() {return _con.empty();}const T& top() {return _con.back();}
private:container _con;
};
上面的代碼是用雙端隊列deque這個適配器構造一個棧。(這是一種車有輪胎的復用常用的復用關系,與c++中繼承對應的植物中的番茄那種復用是不同的)所謂適配器,實際上就是把之前搞定的東西通過轉化后直接用來創建新東西。
3.固定指針和引用的模板
template <class T1&,class T2*>
通過這種方式進行固定指針和引用類型參數。
4.特化與偏特化
4.1原函數模板:
template <class Type>
Type Max(const Type& a, const Type& b)
{cout << "This is Max<Type>" << endl;return a > b ? a : b;
}
template <class Type1,class Type2>
Type1 a(Type1 aa1, Type2 aa2) {return aa1 + aa2;
}
4.2特化:
template<>
int Max<int>(const int& a, const int& b)
{cout << "This is Max<int>" << endl;return a > b ? a : b;
}
通過這個代碼可以對函數模板中int類型的函數模板進行(特化)也就是規定int型的函數會生成這個。
4.3偏特化:
template <class Type1>
Type1 a<Type1,int>(Type1 aa1, int aa2) {return aa1 + aa2;
}
偏特化限制了部分的位置,偏特化進行實例化的優先級是大于全部都是模板參數的。
?
5.仿函數
簡單介紹一下仿函數,實際上就是創建一個類,然后用類的一些方法做到類似函數的效果。例如下面這個代碼:
template<class T>
class less{
public:bool operator() (const T& x, const T& y) {return x > y;}
};
int main() {less<int> ls;bool rt = ls(3, 4);
}
為什么要使用仿函數?當在要進行建大堆和建小堆的情況下,每次都需要改里面的大于和小于號?那不是很麻煩嗎?但是如果在模板中加入一個仿函數對象,就能直接進行處理!