今天在代碼里看到了這樣一段代碼:
typedef typename RefBase::weakref_type weakref_type;
起初一直搞不懂為什么要加個typename,后來搜索了一下才知道這個關鍵字是有目的的:
如果不加這個關鍵字,編譯器就不知道RefBase::weakref_type到底是個什么東西?可能是靜態成員變量,也有可能是靜態成員函數,也有可能是內部類。
加上這個關鍵字等於手動告訴編譯器:RefBase::weakref_type 就是一個類型。
例:
template<typename T> class A { public: typedef T a_type; }; template<typename A> class B { public: //typedef A::a_type b_type; typedef typename A::a_type b_type; }; int main() { B<A<int>> b; return 0; }
如果把注釋取消,就會產生編譯錯誤。