在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”)。考虑一下使用提示。
互换的青春
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'
- 3 回答
- 0 关注
- 667 浏览
添加回答
举报
0/150
提交
取消