今天学泛型编程所以总结一下。
1.元编程和泛型编程。
首先我们通常写下的编程是去处理数据。元编程是写下程序去处理程序。
而我们写下泛型编程则是通过对数据的结构做最小假设去处理不同类型数据,其实现形式是通过编译期根据模板生成模板实例,也就是程序。
所以c++的泛型编程是通过元编程实现二点,也是由代码模板生成代码。
是函数模板:
声明类型参数有两个关键字:
typename:描述性强。
class:容易和类混淆。
在模板中声明和定义必须在一起
函数模板:
tempplate<class T,typename S>
(T)<name>(T a.S b){
}
其中我们在函数返回值类型的位置可以使用auto来自行推导返回值类型。
函数模板的实例化分为两种类型一种是显式实例化,一种是隐式实例化
#include<iostream>
template/*模板前缀*/<typename T/*类型参数,可以采用默认形式默认 T=int*/>
T our(T a) {
return a;
}
template int our<int>(int);//显式实例化
int main() {
int a = 0;
our(a);//隐式实例化
our<int>(a);//隐式实例化
our<>(a);//隐式实例化
}
由函数模板实例化得到的函数叫做实例函数。
类模板:
template <class T>
class abc{
public:
T peek();
T push(T a);
}
如此形式。
类模板的实例化:
显式实例化:
template class abc<int>;
隐式实例化:
abc<int> abcint;//注意命名规则;
下面是对数组类模板的例子
默认类型与非类型参数:
可以指定class T中T的默认类型。
其次,非类型参数:
其中:
Stack<char,100>charStack;对象作为非类型参数,同时我们不难看出,
我们平时定义的数组就是采用一个数组模板类的形式。
ps:、
普通类可以从类模板实例继承。
模板可以从类继承。
类模板可以继承类模板。