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