类模板声明头
template <typename Type>
class Stack
{
private:
Type a ;
...
public:
bool isempty() ;
...
}
//成员函数也用模板替代
//域解析必须为模板,故所有成员函数均为模板函数
template <typename Type>
bool stack<Type>::isempty(){...} ;
Copy
C++
成员模板
在模板类中创建模板类型
将模板用作成员
template <template <typename T> thing >
class crab
{
private:
thing<int> a;
...
}
//根据传入的模拟来决定thing的类型
Copy
C++
模板类可继承,可嵌套,可递归
递归:myclass< myclass<int, int>, int >
实例化 具体化
同模板函数...略
template <class T1, int>...可以实现部分具体化
模板参数-|-类参数
template <template <typename T>class thing1, typename thing2 >
//前者,传入一个模板,后者传入一个类
//thing1<int>中thing1被替换为我们传入的模板
//thing2 被替换为我们传入的类
Copy
C++
模板类友元函数
非模板:仅在类中以函数形式声明友元,需要在类外逐个定义重载
约束模板:类外定义函数模板,在类中声明函数的具体化
非约束模板:在类内定义模板,所有改模板的实例化都视作友元