注意区分模板名和类名或者函数名

对于函数模板:

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;// 错误,这是个模板名字,而不是类名
}
发布了237 篇原创文章 · 获赞 98 · 访问量 5万+

猜你喜欢

转载自blog.csdn.net/KingOfMyHeart/article/details/99117256