目的:对STL源码进行理解,需要通过实现来理解。这个模块,我感觉是对其中的specialization的理解,像是对模板中的类型进行实例化。比如一般的模板肯定是类型可以任意的,但是有些时候,我们需要特定的类型,模板就提供这个功能。测试代码如下:
#include<iostream>
using namespace std;
#define __STL_TEMPLATE_NULL template<>
template<class key> struct myhash //书上的代码是hash,它与我库中hash冲突
{
void operator() (){std::cout << "hash<T>"<<std::endl;}
};
//explicit specialization
__STL_TEMPLATE_NULL struct myhash<char>
{
void operator() (){std::cout << "hash<char>"<<std::endl;}
};
__STL_TEMPLATE_NULL struct myhash<unsigned char>
{
void operator() (){std::cout << "hash<unsigned char>"<<std::endl;}
};
int main()
{
myhash<long> t1;
t1();
myhash<char> t2;
t2();
myhash<unsigned char> t3;
t3();
}
测试的结果如下:
可以看到对于模板的调用是优先实例化的类型。
感悟:模板的功能还是非常多的,了解它对代码的阅读很有作用。