为了账号安全,请及时绑定邮箱和手机立即绑定

使用'class'或'typename'作为模板参数?

使用'class'或'typename'作为模板参数?

C++
一只萌萌小番薯 2019-09-18 10:32:10
在C ++中定义函数模板或类模板时,可以这样写:template <class T> ...或者可以这样写:template <typename T> ...是否有充分理由偏好一个而不是另一个?我接受了最受欢迎(也很有趣)的答案,但真正的答案似乎是“不,没有理由更喜欢一个而不是另一个。”它们是等价的(除非如下所述)。有些人有理由一直使用typename。有些人有理由一直使用class。有些人有理由同时使用这两种方法。有些人并不关心他们使用哪一个。但请注意,在模板模板参数的情况下,在C ++ 17之前,需要使用class而不是typename。
查看完整描述

3 回答

?
ABOUTYOU

TA贡献1812条经验 获得超5个赞

根据Scott Myers,Effective C ++(第3版)第42项(当然,这必须是最终答案) - 差异是“没有”。

建议是使用“class”,如果预期T将永远是一个类,如果可能需要其他类型(int,char *,则为“typename”)。考虑一下使用提示。


查看完整回答
反对 回复 2019-09-18
?
互换的青春

TA贡献1797条经验 获得超6个赞

作为除了所有上述职位,使用的class关键字是被迫(直至并包括C ++ 14),当处理模板的模板的参数,例如:


template <template <typename, typename> class Container, typename Type>

class MyContainer: public Container<Type, std::allocator<Type>>

{ /*...*/ };

在这个例子中,typename Container会产生编译器错误,如下所示:


error: expected 'class' before 'Container'


查看完整回答
反对 回复 2019-09-18
  • 3 回答
  • 0 关注
  • 667 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信