天天看點

C++ 模闆中的template typename 和template class的差別

    在大多數情況下,template<typename t> 與template<class t>是可以互相通用的,而且在早期的c++ 版本中也隻有template<class t>一種申明方式。

    但是這種重複利用已存在的關鍵字的方式似乎會引起混淆。比如下面這樣一個例子:

   代碼的本意是想生命一個類型為t::a的對象指針 aobj,其中a是模闆類t中的一個子類。但是編譯器卻會将這條語句了解成一個表達式,即t中的靜态成員a 與 aobj相乘。這無疑并非是我們想要的。因為這種情況的出現,c++中引進了template<typename t>。一次來解決這種情況。

    這條語句會告訴編譯器這是一條聲明語句,聲明一個t的内部類a的指針對象。

    是以在選擇使用typename和class時,如果沒有上述的這種情況,那麼二者可以通用;如果有,那麼就必須使用typename! 

繼續閱讀