首先,我们要知道模板怎么用:
template <typename T>
T const& Max (T const& a, T const& b)
{
return a < b ? b:a;
}
这样,就能传入int,float,char,都可以传进去,用的时候直接用即可。
还有类模板:
template <class T>
class Stack {
private:
vector<T> elems; // 元素
public:
void push(T const& elem); // 入栈
void pop(); // 出栈
T top() const; // 返回栈顶元素
bool empty() const{ // 如果为空则返回真。
return elems.empty();
}
};
template <class T>
void Stack<T>::push (T const& elem)
{
// 追加传入元素的副本
elems.push_back(elem);
}
类模板不是一个类的类型是模板,而是这个类操作了一个模板参数,例如上面的栈就可以存入int,float,char,用的时候跟vector一样,通过<>实现操作什么参数。
接下来是重点了:
函数模板的模板参数是隐式的,编译器会自动根据传入值的类型来确定模板参数的类型。因此函数模板的模板参数不能有默认值。
类模板的模板参数是显式的,使用一个模板类时必须指明其模板参数,因此类模板的模板参数可以有默认值。