重慶分公司,新征程啟航
為企業提供網站建設、域名注冊、服務器等服務
為企業提供網站建設、域名注冊、服務器等服務
本篇文章為大家展示了C++中如何使用 typename,內容簡明扼要并且容易理解,絕對能使你眼前一亮,通過這篇文章的詳細介紹希望你能有所收獲。
成都創新互聯是專業的固鎮網站建設公司,固鎮接單;提供成都網站制作、做網站,網頁設計,網站設計,建網站,PHP網站建設等專業做網站服務;采用PHP框架,可快速的進行固鎮網站開發網頁制作和功能擴展;專業做搜索引擎喜愛的網站,專業的做網站團隊,希望更多企業前來合作!
問題是,T只是一個類型參數,編譯器并不能確切的知道T中有哪些成員。因此,對于編譯器來說,更為合理的做法把SubType看成了一個T中的靜態成員,從而把上面的代碼理解為T中的靜態成員SubType乘上ptr。(我想,這與編譯器在模板實例化時的處理方式有關。我不知道編譯器在實例化模板的時候會按什么步驟走,但是肯定和普通的類實例化完全不一樣。因為按照正常的類的實例化過程,編譯器完全應該能知道SubType是T中的一個嵌套類。希望書中后面的內容能提供解釋)。
這個時候C++ typename就能夠明確的告訴編譯器,SubType是一個類型,需要按照類型的方式處理。
下面是書中的一個實例:
#include < iostream> #include < vector> template< typename T> void printcoll(T const& coll) { typename T::const_iterator pos; typename T::const_iterator end(coll.end()); for(pos = coll.begin(); pos != end; ++pos) { std::cout< < *pos< < ' '; } std::cout< < std::endl; } int _tmain(int argc, _TCHAR* argv[]) { // 測試printcoll std::vector< int> intVector; intVector.push_back(1); intVector.push_back(2); intVector.push_back(3); intVector.push_back(4); printcoll(intVector); return 0; }
注意到第7行和第8行,在定義變量的時候迭代器const_iterator是容器T中的一個類型。因此,在定義T::const_iterator的變量的時候需要在前面加上typename。可以說,正是由于const_iterator是一個依賴于模板參數的類型,所以我們必須使用C++ typename明確的指它是一個類型。否則,編譯器就不能正常識別。
上述內容就是C++中如何使用 typename,你們學到知識或技能了嗎?如果還想學到更多技能或者豐富自己的知識儲備,歡迎關注創新互聯行業資訊頻道。