2010年5月9日 星期日

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

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

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


第10行如果這樣子寫的話,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

沒有留言:

張貼留言