嗨喽大家好,时隔许久阿鑫又给大家带来了新的博客,模板进阶,下面让我们开始今天的学习吧!
模板进阶
1.非类型模板参数
2.模板的特化
3.模板的分离编译
1. 非类型模板参数
模板参数分为类型形参与非类型形参。
类型形参即:出现在模板参数列表中,跟在class或者typename之类的参数类型名称。
非类型形参,就是用一个常量作为类(函数)模板的一个参数,在类(函数)模板中可将该参数当成常量来使用。
namespace bite
{
// 定义一个模板类型的静态数组
template<class T, size_t N = 10>
class array
{
public:
T& operator[](size_t index){
return _array[index];}
const T& operator[](size_t index)const{
return _array[index];}
size_t size()const{
return _size;}
bool empty()const{
return 0 == _size;}
private:
T _array[N];
size_t _size;
};
}
int main()
{
array<int, 10> aa1;
int aa2[10];
return 0;
}
注意:c语言中对静态数组的越界访问是一种抽查的方式
void PrintVector(const vector<int>& v)
{
vector<int>::const_iterator it = v.begin();
while (it != v.end())
{
cout << *it << endl;
it++;
}
cout << endl;
}
template<class T>
void PrintVector(const vector<T>& v)
{
typename vector<T>::const_iterator it = v.begin