类模板

1.使用类模板的时候,你可以传入某个具体的类型作为模板实参,然后编译器根据该类型实例化类模板。

类模板的声明:

template <typename T>

calss stack

{

......

};

T可以像其他类型一样在类模板内部使用。这个类的类型是:stack<T>,其中T为模板参数。

成员函数的实现:

template <typename T>
void stack<T>::push(T const& elem)
{
    elems.push_back(elem);
}
 

2.对于类模板,只有那些被调用的成员函数才会被实例化。对于那些“未能提供所有成员函数中所有操作的”类型,你也可以使用该类型进行实例化,只要对那些“未能提供某些操作的”成员函数,模板内部不使用就行了。

 

3.某种特定类型特化类模板:优化基于某种特定类型的实现和克服某种特定类型在实例化出现的不足。

template<>
class stack<std::string>
{
......
};
特化时,每个成员函数都必须重新定义为普通函数,T被特化类型取代。
特化的实现可以和基本类模板的实现完全不同。
 

4.某种特定类型局部特类模板:

类模板:

template <typename T1,typename T2>
class myclass
{
......
};
局部特化例子:
template<typename T>
class myclass<T,T>
{
......
};
template <typename T>
class myclass<T,int>
{
......
};

等等。

 

5.为类模板的参数定义设定缺省值,这些值可以引用之前的模板参数。

stack的第二个参数是代表存储类型,缺省为vector。

template <typename T, typename CONT = std::vector>
class stack
{
......
};
成员函数:
template <typename T, typename CONT>
void stack<T,CONT>::push(T cosnt& elem)
{
    elems.push_back(elem);
}
当然你也可以:stack<double,std::deque<double> >。

posted on 2011-10-18 12:43  fire_fuxm_USTC  阅读(393)  评论(0编辑  收藏  举报