模板的参数有三种类型:类型参数,非类型参数和模板类型参数。
类型参数
最基础的参数表示
template<typename T1>
非类型参数
非类型参数是指内置类型参数。非类型模板参数为模板预定义一些常量。在模板实例化时,要求实参必须是常量,即确切的数据值。非类型参数只能是整型,字符型或枚举,指针,引用类型。非类型参数在所有实例中都具有相同的值。
template<int inst>
class __malloc_alloc_template{
};
模板类型参数
所谓模板类型参数,就是该模板参数本身还是模板类型。
template<typename T1, template<typename T1>
class Container>
class Widget{
public:
Container<T1> container;
};
但是下列情况不属于模板类型参数
template<typename T1, typename Sequence = deque<T1>>
class stack{
protected:
Sequence c;
};
属于默认模板参数