可能是C++的設(shè)計者(BJ?)覺得沒用必要引入更多的關(guān)鍵字,其實模板剛剛引入C++中的時候并沒有typename關(guān)鍵字。那時候定義類模板的類型參數(shù)通常使用class關(guān)鍵字。如:
template<class T>
class Test
{
? ? public :
? ? ?? T t;
? ? .....
};
隨著模板應(yīng)用的推廣,大家發(fā)現(xiàn)使用typedef非常關(guān)鍵,因為實例化后的模板定義通常很長,通過使用typedef可以有效的縮短代碼長度。如:
class UseTest
{
public:
??? typedef Test<int> intTT;
??? ...
};
這時問題就來了,當(dāng)我寫UseTest::intTT,這個intTT究竟是UseTest的一個靜態(tài)成員(static)還是一個類型呢?所以typename關(guān)鍵字就引入了C++。
所以在定義一個intTT的對象時,我們就要這樣寫:
? typename UseTest::intTT int_tt_obj;
通過typename明確指出intTT是一個類型而不是一個靜態(tài)成員。