[導(dǎo)入]More Exceptional C++ 之 4
typename 常常在模板類(lèi)的聲明或定義中用來(lái)聲明一個(gè)類(lèi)型。在模板中,如果一個(gè)和模板參數(shù)相關(guān)的名字沒(méi)有在名字解析中被找到,或者被關(guān)鍵字 typename 修飾,則它不能作為一個(gè)類(lèi)型。考慮下面的代碼:template< typename T >
class X_base
{
public:
typedef T instantiated_type;
};
template< typename A, typename B >
class X : public X_base< B >
{
public:
bool operator()( const instantiated_type& i ) const
{
return i != instantiated_type();
}
// ... more stuff ...
};
instantiated_type 和模板參數(shù)類(lèi)型相關(guān),使用名稱(chēng)解析不能找到并且沒(méi)有被關(guān)鍵字 typename 修飾,因此將導(dǎo)致編譯錯(cuò)誤,正確的方法是使用關(guān)鍵字 typename。
文章來(lái)源:http://my.donews.com/robinchow/2007/01/18/gywtqxaalrvetoldhdtlmchhlsmnfxklwgem/
posted on 2007-10-23 20:47 Robin Chow 閱讀(85) 評(píng)論(0) 編輯 收藏 引用