1.typename
指示 依赖于模板参数的名字是一个类型
例子:
typename T::const_iterator pos;
2. .template
指示 前面存在依赖于模板参数的对象
3.成员模板
a.嵌套类
b.成员函数模板
template <typename T>
class stack
{
public:
template <typename T1>
void operator= (stack<T1> cosnt & );
};
template <typename T>
template <typename T1>
void stack<T>::operator= (stack<T1> const &a )
{
}
3.模板的模板参数
只有在类模板才能使用,函数模板不支持
简而言之 就是模板参数是个模板(该模板参数必须是个类类型)
template <typename T ,typename T2>
class stack{
private:
T2 elem;
}
stack<int,vector<int> >
对比模板的模板参数
template <typename T, template <typname T2,typename T3=std::allocator<ELEM> > class CONF =std::vector >
class stack
{
}
stack<int,list> 就可以了
3.模板参数和模板实参
template 后的参数 即为 模板参数(template paramete)
传递模板实参使之成为模板参数
显示替换
template <typename T>
class stack{};
stack<int> a;
stack<stack<int> > b;
模板参数成为模板实参
template <typename T>
class A{
private :
stack<T> elem;
}
模板实参是要求编译期可以确定的模板实体和值