在c++中函数的参数和返回值类型无法确定,类中的成员数据类型无法确定时我们可以使用类模板,来代表一类类,然后通过编译器对接受的数据进行类型识别进行自动转化。
例如当我们定义一个类时我们可以这样
template<class T>
class stack
{
private:
T* a;
public:
void Push(const T& x);
};
typename和class效果是一样的,我们也可以在类型前加static,const来表示静态变量和常量。
当我们要在类外定义成员函数时
template<class T>
void stack<T>::Push(const T& x)
{
cout << "push" << endl;
}
若成员函数中存在模板我们需要重新定义模板。
在使用模板时我们还需要注意不能将模板定义为不同类型。例如:
template<class T>
T f(T a,T b)
{
return a+b;
}
在这样的函数中我们如果将a=1.2,b=1传入是会报错的,一种模板只能表示一种类型。
但是需要注意如果a=1,b=1.2不会报错,但是会出警告,因为b自动强制转换为了int类型,但在上一个例子中int类型是无法转化为float类型的。