模板和之间有什么区别?和模板。对我来说两者都产生相同的结果
template
和 template
之间有什么区别。 对我来说,两者都产生相同的结果。
例如
template <class T>
T Average(T *atArray, int nNumValues)
{
T tSum = 0;
for (int nCount=0; nCount < nNumValues; nCount++)
tSum += atArray[nCount];
tSum /= nNumValues;
return tSum;
}
,如果我将其更改为 template
它是相同的
What is difference between template <typename T>
and template <class T>
.
For me both are generating the same result.
for example
template <class T>
T Average(T *atArray, int nNumValues)
{
T tSum = 0;
for (int nCount=0; nCount < nNumValues; nCount++)
tSum += atArray[nCount];
tSum /= nNumValues;
return tSum;
}
if I change it to template <typename T>
it's the same
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
它们在大多数情况下是等效的并且可以互换,有些人更喜欢 typename,因为在该上下文中使用关键字 class 似乎很混乱。
需要 typename 的原因是针对使用
template
时的那些不明确的情况,例如,您定义了这样的模板:然后由于某种原因,模板的用户决定实例化class as this
var 应该是什么、类迭代器的实例还是静态类型 int 变得不明确。因此,在这种情况下,引入了 typename 来强制将模板对象解释为类型。
They're equivalent and interchangeable for most of the times, and some prefer typename because using the keyword class in that context seems confusing.
The reason why typename is needed is for those ambiguous cases when using
template <class T>
for example, you define a template like this:and then for some reason the user of your template decides to instantiate the class as this
It becomes ambiguous what var should be, an instance of a class iterator or the static type int. So for this cases typename was introduced to force the template object to be interpreted as a type.
看看这个:
http://www.cplusplus.com/forum/general/8027/
它们都会产生相同的行为。当您使用 typename 时,它的可读性更强。
Look at this:
http://www.cplusplus.com/forum/general/8027/
They both produce the same behaviour. When you use typename its more readable.
没有什么区别。
typename
和class
在类型模板参数的声明中可以互换。但是,在声明模板模板参数时,您必须使用
class
(而不是typename
):There is no difference.
typename
andclass
are interchangeable in the declaration of a type template parameter.You do, however, have to use
class
(and nottypename
) when declaring a template template parameter: