2011-04-25 122 views
6

是什么在两种方式模板在C++中,类型名称和

template<typename T> & template<class T>

下面写C模板之间++的区别,当我们喜欢他们在彼此之上? 如果两者都是相同的,那么为什么我们有他们两个,如果足够了?

+0

我更喜欢'typename',因为我的模板接受非类类型(但是,它们完全相同)当然, – Cubbi 2011-04-25 10:28:43

+0

模板中的C++关键字'typename'和'class'不同](http://stackoverflow.com/questions/2023977/c-difference-of-keywords-typename-and-class-in-templates) – Matt 2011-11-14 11:22:02

回答

9

没有任何区别。我更喜欢第一个(大部分),但这是我个人的品味。这种语言在它们之间没有任何区别。

对于模板参数,关键字typenameclass是等效的。 §14.1.2说:

有一个 模板参数类和类型名之间没有语义差别 。


如果两者相同,那么为什么我们有他们两个,如果一个就够了?

斯坦李普曼解释了这个在他的文章:

Why C++ Supports both Class and Typename for Type Parameters?

+0

更多信息可以在[在这篇博客中找到](http:// blogs。 msdn.com/b/slippman/archive/2004/08/11/212768.aspx)。 – orlp 2011-04-25 09:54:05

+0

此链接可能很有用http://pages.cs.wisc.edu/~driscoll/typename.html – 2011-04-25 09:57:45