模板?
目录
模板?
1.介绍
2.函数模板的使用
3.函数模板的强制转换or显式调用
四,模板的分类
1.介绍
在Cpp3.0中,祖师爷便引入了模板的概念。这是一个重大的变革,为后来的Cpp标准化打下了铺垫。也正是因为有了模板,Cpp才能有STL库。这么好的东西,那我们今天就浅浅的了解一下吧:和现实生活中的模板一样,Cpp模板的作用就是当一个模子来将一些重复的事件来作标准化的快速处理。比如说一些在逻辑上重复的代码,可以通过函数重载来运行,但还是太麻烦,如swap函数,通过函数重载的方式来实现的话就是这样的:
void swap(int* p1, int* p2)//实现整型的交换 { int temp = *p1; *p1 = *p2; *p2 = temp; } void swap(char* p1, char* p2)//实现字符型的交换 { char temp = *p1; *p1 = *p2; *p2 = temp; } void swap(double* p1, double* p2)//实现双精度浮点型的交换 { double temp = *p1; *p1 = *p2; *p2 = temp; }
那通过函数模板是怎么实现的呢?
2.函数模板的使用
要使用模板,首先得清楚的知道一个叫做template的关键字。这个关键字是用来定义函数模板变量的。
1.定义方式:template <class T>或者template<typename T>。在定义好这个虚拟类型变量以后再用这个T来代替函数中的类型便可以使用模板了。如:
template<class T> void Swap(T& p1, T& p2) { T temp = p1; p1 = p2; p2 = temp; }
在搞好了这个模板以后,但凡是要搞交换逻辑的代码并且要交换的两者类型相同的代码都可以用这份模板来支持。
2.定义多个模板虚拟类型。定义多个虚拟的方式如下:template<class T1,class T2>。这样便定义了多个虚拟类型。当我们实现一个加法函数时可能是小数加小数,也可能是整数加整数,还可能是小数加整数。所以为了实现这样的加法便可以使用模板定义出两个虚拟类型再实现这个函数,如:
template <class T1,class T2> T2 Add(T1 p1, T2 p2) { return p1 + p2; }
3.函数模板的强制转换or显式调用
其实在有些情况下我们是需要显式调用函数模板的,如下面的情况:
template<class T> T* func(int n) { return new T[n]; }
这种情况下不显示调用函数模板便会出问题。所以,为了调用这个函数便要进行强转的操作,语法如下:函数名<类型>( 参数/无参),如这个函数我要进行变成整型的调用操作如下:
int* ptr = func<int>(10);
四,模板的分类
模板分为函数模板与类模板。上面介绍的都是函数模板。类模板其实也差不多,就是写一个类然后将类的类型用虚拟模板类型代替便可以生成一个类模板了。
初尝模板就到这里了。