首頁 > 程式設計 > [C++] 如何在template 善用typename ?

[C++] 如何在template 善用typename ?

在編譯其他人的Program 時發現的。(也多虧這些人有釋出這種奇奇怪怪的code,

我才發現g++ 編譯器在處理template時是怎麼運作的。)
example:

template<typename T>
class A{
public:
    T m_A;
    void funcTest()
    {
        map<T , int> mapTempTable; /* 這部分沒問題, OK! */
        map<T, int>::iterator it;  /* 編譯器會出錯! */
    }
};

第8行如果這樣子寫的話,g++ 編譯器會出錯!硬是要在前面加個typename 變成:

typename map<T, int>::iterator it;

才能夠解決!

這是為什麼呢? 因為:: scope operator 接在它後面的可以是成員變數、函數或是

物件類型。

如果不加上typename的話,編譯器可能會將iterator 誤認為成員變數。

(實際上iterator是一個物件類型)

所以要加上typename,讓編譯器知道這個東西是一個物件類型。

Ref:

http://lnk.in/73g7

http://www.webdesgin-information.com/?p=54

http://pages.cs.wisc.edu/~driscoll/typename.html

分類:程式設計 標籤:
  1. 仍無迴響。
  1. No trackbacks yet.

發表迴響

在下方填入你的資料或按右方圖示以社群網站登入:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / 變更 )

Twitter picture

You are commenting using your Twitter account. Log Out / 變更 )

Facebook照片

You are commenting using your Facebook account. Log Out / 變更 )

Google+ photo

You are commenting using your Google+ account. Log Out / 變更 )

連結到 %s

%d 位部落客按了讚: