在读源码剖析之前,有几点知识是必不可少的。一是模板特化与部分特化、二是operator new、三是基本的数据结构知识,对于我来说主要是红黑树和hash。
一、模板特化与部分特化:
template<class T, class U>
class Ordinary
{
public:
T* Func(U&);
private:
T m_Var;
};
//特化版本
template<>
class Ordinary<int ,char>
{
public:
int* Foo(char&);
char* GetString();
private:
int m_Var;
};
注意点:1、特化版本的语法格式必须要如上所示(这里以C++标准为基准);2、特化版本可以添加自己的方法或属性,这些方法或属性泛化模板类无法访问;3、在同时有泛化版本和特化版本时,如果需要,编译器首先选择特化版本匹配用户的使用,如:Ordinary<int, char> obj;这时,编译器实例化的是特化版本。
//部分特化版本
template<class U>
class Ordinary<int, U>
{
public:
//........
private:
//........
};
注意点:部分特化版本与泛化版本根本就是两个东西,两个类模板没有联系,就是两个独立的类模板。
特别重要的地方:部分特化的方式,主要有两种(待续。。。。)