1、模版
模版是实现代码重用的一种机制,可以实现类型参数化,意思就是在模版中参数类型也是一种参数。模版可以分为函数模版和类模版。
2、函数模版
函数模板的一般形式如下:
Template <class或者也可以用typename T>
返回类型 函数名(形参表)
{//函数定义体 }
写法举例:
template<class T> //template是关键字,表示声明一个模版,不能省略
T Min(const T &x,const T &y)
{
return (x<y)?x:y;
}
3、类模版
写法举例:
#include <iostream>
#include<cstdio>
#include<cstdlib>
using namespace std;
template<class T1,class T2> //声明模版类的关键字
class myClass
{
T1 a;
T2 b;
public:
myClass(T1 a,T2 b);
void show();
};
//构造函数
template<class T1,class T2> //模版函数关键字
myClass<T1,T2>::myClass(T1 i,T2 j)
{
a=i;
b=j;
}
//成员函数
template<class T1,class T2> //模版函数关键字
void myClass<T1,T2>::show()
{
cout<<"--------------------\n";
cout<<"a=="<<a<<endl;
cout<<"b=="<<b<<endl;
}
int main()
{
myClass<int,int> c1(1,2);
c1.show();
myClass<int,char> c2(1,'d');
c2.show();
return 0;
}
4、模版类型
有时候模版类型可能是容器,这个时候应该怎么实现函数模版呢?
具体实现:(程序运行环境为vs2010)
#include <iostream>
#include <vector>
#include<list>
#include <string>
#include <iterator>
using namespace std;
template <typename T>
void display(const T & t)
{
T::const_iterator it;
for (it = t.begin(); it != t.end(); ++it)
cout << *it << " ";
cout << endl;
}
int main()
{
vector<int> vec;
vec.push_back(1);
vec.push_back(2);
display(vec);
list<int> l;
l.push_back(33);
l.push_back(44);
display(l);
return 0;
}
通过这个例子可以看出,迭代器是支持模版的。
5、总结
在C++中,泛型编程是很重要的一门技术,能大大提高代码的重用性,尤其是在大的工程中,使用模版更加能提高代码的简洁性以及开发的高效。
既然使用了模版,那么在传参数的时候就尽量使用传引用,这样的话不仅仅能传递常规的数据类型,而且还能传递自定义的一些复杂的数据类型。