对于函数模板:
template<typename T>
bool com(T a, T b)
{
return a > b;
}
int main()
{
com(10,100);
com<float>(1.2, 9.0);
return 0;
}
以上出现com的地方全部都是模板名
而当模板实例化以后,编译器为我们产生的对应类型的函数com才能称得上是函数名
对于类模板:
template<typename T = int>
class Node
{
public:
Node(T data = T()):_data(data),_pnext(Null){}
~Node<T>(){}
private:
T _data;
Node<T>*_pnext;
};
同样的,此时Node还是一个模板名,只有在被实例化以后才能是一个类或者类型
所以,我们希望使用一个类名而不是模板名的地方,一定要给模板名后面加上尖括号,
如Node<int> 这才表示是一个类名称,或者是一种类型
int main()
{
Node<int> p;
Node<> p2;
Node p3;// 错误,这是个模板名字,而不是类名
}