typename 常常在模板類的聲明或定義中用來聲明一個類型。在模板中,如果一個和模板參數相關的名字沒有在名字解析中被找到,或者被關鍵字 typename 修飾,則它不能作為一個類型。考慮下面的代碼:
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 和模板參數類型相關,使用名稱解析不能找到并且沒有被關鍵字 typename 修飾,因此將導致編譯錯誤,正確的方法是使用關鍵字 typename。
文章來源:
http://my.donews.com/robinchow/2007/01/18/gywtqxaalrvetoldhdtlmchhlsmnfxklwgem/