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

在C ++中定义函数模板或类模板时,可以这样写:


template <class T> ...

或者可以这样写:


template <typename T> ...

是否有充分理由偏好一个而不是另一个?


我接受了最受欢迎(也很有趣)的答案,但真正的答案似乎是“不,没有理由更喜欢一个而不是另一个。”


它们是等价的(除非如下所述)。

有些人有理由一直使用typename。

有些人有理由一直使用class。

有些人有理由同时使用这两种方法。

有些人并不关心他们使用哪一个。

但请注意,在模板模板参数的情况下,在C ++ 17之前,需要使用class而不是typename。


一只萌萌小番薯
浏览 670回答 3
3回答

ABOUTYOU

根据Scott Myers,Effective C ++(第3版)第42项(当然,这必须是最终答案) - 差异是“没有”。建议是使用“class”,如果预期T将永远是一个类,如果可能需要其他类型(int,char *,则为“typename”)。考虑一下使用提示。

互换的青春

作为除了所有上述职位,使用的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'
打开App,查看更多内容
随时随地看视频慕课网APP