结束了常用容器的介绍,今天继续模版内容的讲解:
文章目录
1.非类型模版参数
模板参数可以大致分为:分类类型形参与非类型形参。
类型形参即:出现在模板参数列表中,跟在
class
或者``typename`之类的参数类型名称非类型形参,就是用一个常量作为类(函数)模板的一个参数,在类(函数)模板中可将该参数当成常量来使用
#include<iostream>
using namespace std;
template<class T,int N>
class MyArray
{
public:
MyArray()
{
for (int i = 0; i < N; ++i)
{
_arr[i] = i;
}
}
void print()
{
for (int i = 0; i < N; ++i)
{
cout << _arr[i] << " ";
}
}
private:
T _arr[N];//定义一个静态数组
};
void test1()
{
MyArray<int, 10> my;
my.print();
}
int main()
{
test1();
return 0;
}
注意:
-
浮点数、类对象以及字符串是不允许作为非类型模板参数的。
-
非类型的模板参数必须在编译期就能确认结果。
2.模板的特化
2.1模版特化引入和概念
通常情况下,使用模板可以实现一些与类型无关的代码,但对于一些特殊类型的可能会得到一些错误的结果,需要特殊处理。如下
template<class T>
bool Less(T left, T right)
{
return left < right;
}
void test2()
{
cout << Less(1, 2) << endl; //结果正确
double d1 = 1.1;
double d2 = 2.2;
cout << Less(d1, d2) << endl; //结果正确
double* p1 = &d1;
double* p2 = &d2;
cout << Less(p1, p2) << endl; //结果错误
}