※ 引述《march20.bbs@ptt.cc》之銘言:
> ok, 我這樣說確實不夠嚴謹,
> 我不清楚製訂 C++ 的人是基於什麼理由被設計出 template 的,
> 以下言論純粹是個人的使用經驗, 歡迎指教 :)
其實當初 template 被放進 C++ 的原因極其單純,
不過就是「讓程式碼看起來更簡潔」。
上一篇回給你的部分其實不是將 template 放到 C++ 裡的人想到的,
而是後人挖掘出來的附加價值,
如果不清楚我說什麼歡迎再討論,
不過我 7/31 要搬家,
所以可能沒辦法馬上回或回得很詳細。
> 就 "製造 code 模版" 這件事來說, template 確實是種 macro, 但硬要說 "template
> 可以被 macro 取代" 是有問題的. 我想說的其實很簡單:
> 很多 macro 造成的問題, 在 template 都看得到, 因為就實質作用來說,
> 這兩種有很高的成份是相同的.
成分相似不代表能互相取代,
就像 OO design patterns 裡也會出現 class diagram 相似,
但是作用完全不同的例子,
需要拿 UML 裡其它的 diagram 一起看才會知道其差別,
也是這樣的道理。
C++ 的爸爸的確是很想讓 const 跟 template 取代掉 macro,
但實務上證明了這是不可行的,
事實上 template 主要可取代的只有 function-like macro,
因為有充分的正當性,
光是能用 ## 這種東西的理由也難以辯駁。
> 對於 C++ 的 template, 我認為這是該 "小心使用" 的一種語言構造, 嚴謹地使用
> 可以帶來相當大的便利, 如 STL. 但誤用帶來的麻煩也遠較其它語法更為嚴重,
> STL 又是一個很好的例子 :P
前陣子無聊看到 C# 的 code,
有注意到 C# 有對 template parameter 加上一層保護,
忘記了它的 syntax,
不過它能夠限制具備哪些特性的 class 才可以被丟進來;
這個功能在 C++ 恐怕不會被採用,
因為 C++ 目前標榜的還是什麼東西都盡可能在 compile-time 做完。
至於 template parameter 的誤用問題,
C++ 社群最常見的說法是就算誤用,
也能在 compile-time 就檢查出來,
只是現在 compiler 吐出來的 error message 都很爛,
所以常常讓新手看不懂而直接放棄或四處亂 try。
我個人並不會不支持這樣的說法,
畢竟看懂 error messages 本來就是 programmer 的責任,
而且雖然那些 error messages 可以把螢幕洗爆,
仔細耐心去看個一兩次其實還是能發現要怎樣去抓到重點,
那些 messages 其實 C++ Primer 這本書都有看懂的話其實都沒問題,
更何況摸熟 C++ Primer 這本書的內容只是 C++ programmer 的最基本要求。
--
Name: Tseng, Ling-hua E-mail Address: uranus@it.muds.net
School: National Tsing Hua University Department: Computer Science
Interesting: C++, Compiler, PL/PD, OS, VM, Large-scale software design
Researching: Undecided
Homepage: https://it.muds.net/~uranus
--
╔═══╗ ┼────────────────────────╮
║狂狷 ║ │* Origin:[ 狂 狷 年 少 ] whshs.cs.nccu.edu.tw ╰─╮
║ 年少║ ┼╮ < IP:140.119.164.16 > ╰─╮
╚╦═╦╝ ╰ * From:218-171-139-90.dynamic.hinet.net
─╨─╨─ KGBBS ─ ◎ 遨翔"BBS"的狂狷不馴;屬於年少的輕狂色彩 ◎