C++模板
在学习c++模板的时候,我们涉及到过向量的模板vector<int> vec
,这其实是已经定义好的类模板,我们拿来直接用,进行类模板的实例化,得到了vec的对象。但是为了增加语言的灵活性,c++支持用户自定义模板,实现封装。
模板是一种对类型进行参数化的工具。
通常有两种形式:函数模板和类模板。
使用模板的目的就是能够让程序员编写与数据类型无关的代码。
1. 函数模板格式
template<typename T> 函数返回值类型 函数名称 (函数参数列表)
{
函数体;
};
注意:T只是类型形参,在模板函数被调用的时候会把实际的数据类型传递给模板中的形参。
举个例子:
template<typename T> T func(T a,T b)
{
T temp;
if(a>b)
{
temp = a;
cout << temp << endl;
}
}
调用函数func()的时候,func(2,3),这个时候会把int类型的实参传递给模板中的形参。从而实现函数的封装,实现函数的定义和数据类型无关。
2. 类模板的一般格式
Template<typename T> class 类名{...};
其中T只是自己取得形参的名称,没有实际意义。
举个例子:
Template<class T> class A
{public:
T a;
T b;
T func(T c, T &d);
};
那么现在问题来了,怎么调用,对于函数而言我们说函数的调用,但是对于类而言我们一般说实例化,那么怎么实例化呢,同样可以参考vector<>
模板的用法,即是在实例化的时候进行实际的类型参数的传递。例如vector<int> veec
其中int是传递过去的实际类型参数。
其他的问题参考一下别人的博客。如下