C++标准程序库STL

时间:2022-07-06 19:48:23

1.1 template 模版

     所谓templates, 是针对一个或多个尚不明确类型所撰写的函数或者类别。使用template时可以显示或者隐士的将型别当作参数来传递。如传回两数之中的较大数:

template <class T>
inline const T& max(const T& a, const T& b)
{
return a < b ? b:a;
}
在这里第一行将T定义为任意数据类别, 在函数调用时由调用者指定, 任何合法的识别符都可以拿来作为参数名称, 但通常用T标识, 这个型别由关键字class引导, 但型别本身不一定是class。

 Default template 

template classes 可以又缺省参数, 如一下声明,允许使用一个或者两个template参数来声明Myclass对象:

template<class T, class container =  vector<T>>

class MyClass;

如果只传递给他一个参数, 那么缺省参数可作为第二个参数使用, 

MyClass<int> X1;

MyClass<int, vector<int>>

缺省参数可根据前一个参数而定义。

1.2关键字Typename

关键字typename被用来作为类型之前的标识符号,如:

template <class T>

class MyClass

{

typename T::SubType * ptr;

....

};

这里typename指出subtype是class T中定义的一个类别, 英雌ptr是一个指向T::subtype类别的指针, 如果没有关键字typename,subtype会被当成 一个静态static成员,于是:

T::subtype * ptr 会被解释为类别T内的数值subtype和ptr的乘积。

Subtype成为一个型别的条件是,任何一个用来取代T的型别, 其内都必须提供一个内部类型subtype的定义, 如:

MyClass<Q> x;

必要的条件是型别Q有如下的内部型别定义:

class Q

{

typedef int Subtype;

。。。

};