在C ++中定義函數(shù)模板或類模板時,可以這樣寫:template <class T> ...或者可以這樣寫:template <typename T> ...是否有充分理由偏好一個而不是另一個?我接受了最受歡迎(也很有趣)的答案,但真正的答案似乎是“不,沒有理由更喜歡一個而不是另一個。”它們是等價的(除非如下所述)。有些人有理由一直使用typename。有些人有理由一直使用class。有些人有理由同時使用這兩種方法。有些人并不關心他們使用哪一個。但請注意,在模板模板參數(shù)的情況下,在C ++ 17之前,需要使用class而不是typename。
3 回答

ABOUTYOU
TA貢獻1812條經驗 獲得超5個贊
根據(jù)Scott Myers,Effective C ++(第3版)第42項(當然,這必須是最終答案) - 差異是“沒有”。
建議是使用“class”,如果預期T將永遠是一個類,如果可能需要其他類型(int,char *,則為“typename”)??紤]一下使用提示。

互換的青春
TA貢獻1797條經驗 獲得超6個贊
作為除了所有上述職位,使用的class關鍵字是被迫(直至并包括C ++ 14),當處理模板的模板的參數(shù),例如:
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 關注
- 715 瀏覽
添加回答
舉報
0/150
提交
取消